jQuery dataType:

时间:2011-10-29 07:50:53

标签: php jquery xml

我对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()回调的其他建议。感谢。

我非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

坚持使用“xml”dataType并在echo之前将其添加到您的PHP文件中......

header('Content-type: text/xml');

此外,您似乎混淆了一些jQuery.ajax()回调。

  • 使用success处理返回的数据。
  • 使用error(jqXHR, textStatus, errorThrown)(不是failure)来处理HTTP错误
  • completesuccess回调执行后,使用error执行某些任务