我对jQuery dataType有一个奇怪的问题。
我有一个非常简单的PHP程序,它返回(echo)一个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 中获得无结果。 / p>
继续为此疯狂。我是否真的需要为浏览器设置条件逻辑?
jQuery手册中解释的 dataType:选项似乎很清楚。我甚至试图将dataType输出
(每个手册:如果没有指定,jQuery将尝试根据MIME推断它 回复的类型)
我也试过多种类型 - 例如“text xml”。不好。
有人遇到过这个问题吗?任何方向都会受到赞赏。
谢谢。
P.S。我知道我可以在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()回调的其他建议。感谢。
我非常感谢你的帮助!
答案 0 :(得分:3)
坚持使用“xml”dataType
并在echo
之前将其添加到您的PHP文件中......
header('Content-type: text/xml');
此外,您似乎混淆了一些jQuery.ajax()
回调。
success
处理返回的数据。error(jqXHR, textStatus, errorThrown)
(不是failure
)来处理HTTP错误complete
和success
回调执行后,使用error
执行某些任务