我有一个关于 jQuery 数据类型的奇怪问题。
我有一个非常简单的 PHP 程序,它返回(回显)一个 XML 文件(字符串)。看起来像这样:
$xmlFile = "sampleXMLFile.xml";
$xml = simplexml_load_file($xmlFile);
echo $xml->saveXML();
我的客户端/javascript代码通过ajax调用php程序:
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "myPHPFile.php",
dataType: "xml",
success: myCompleteFunction,
complete: mySuccessFunction,
failure: function(data) {
alert("Problem getting XML");
} });
});
“myCompleteFunction”采用 XML 并简单地将第一个节点写入 div 元素,如下所示:
function myCompleteFunction(xml)
{
$(xml).find("Row").each(function()
{
$("#result3").append($(this).attr("myrow"));
});
}
好的 - 在 IE 8 中,这可以正常工作。在 Firefox 和 Chrome 中,我没有结果。但是,如果我将 dataType 更改为 "html",我会在 Firefox 和 Chrome 中得到正确的结果,然后在 IE 中得到无结果。'
继续为此疯狂。我真的需要为浏览器添加条件逻辑吗?
jQuery 手册中解释的 dataType: 选项似乎足够清楚。我什至尝试将 dataType 排除在外
(per manual: If none is specified, jQuery will try to infer it based on the MIME type of the response)
我还尝试了多种类型 - 例如“文本 XML”。不好。
有人遇到过这个问题吗?任何方向将不胜感激。
谢谢。
附:我知道我可以用 jQuery 读取 XML 文件。 PHP 程序生成的 XML 将涉及更多内容。我只是用它作为例子。
更新:
嗯,我看到 Phil 关于在发送 XML 数据之前生成一些东西的评论。当然没有什么明显的事情。我删除了第一个 <?php
上方的空行线。这在某种程度上起到了作用!我仍然觉得很奇怪。所以我的新的、更严格的 PHP 代码现在是:
<?php
// Load XML
$xmlFile = "sample.xml";
$xml = simplexml_load_file($xmlFile);
header('Content-type: text/xml');
echo $xml->saveXML();
?>
我还会注意您关于正确处理 jQuery.ajax() 回调的其他建议。谢谢。
非常感谢您的帮助!!
最佳答案
坚持使用“xml”dataType
,并将其添加到您的 PHP 文件中 echo
...
header('Content-type: text/xml');
此外,您似乎混淆了一些 jQuery.ajax()
回调。
- 使用
success
处理返回的数据。 - 使用
error(jqXHR, textStatus, errorThrown)
(而不是failure
)来处理 HTTP 错误 - 使用
complete
在success
和error
回调执行后执行一些任务
关于php - jQuery 数据类型 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7937656/