解析XML输出的问题(PHP / JQuery)

时间:2009-11-17 22:35:29

标签: jquery xml ajax parsing

我沮丧地挠头,但我找不到答案。 我是Ajax的新手,我正在尝试这个简单的脚本:

这是我的代码:

JAVASCRIPT:

$(document).ready(function(){    
    $("#toggle_album").click(function () {  
        $.post('backend/load_album_thumbnails.php', {  
            text: 'my string',  
                number: 23  
        }, function(xml) {  
                var timestamp = $(xml).find("time").text();
                alert(xml);
                alert(timestamp);
        });  
    });
});  

alert(xml)返回:

     <? xml version="1.0"?>
<response status="ok">
<time>23:33:13</time>
<string>my string</string>
</response>

警报(timestamp)返回空

我也尝试过:

timestamp = $(“time”,xml).text();

具有相同的结果。

我在xml开始标记中添加了额外的空格,因为它在stackoverflow上消失了。我能想到的这个错误的唯一原因是返回数据不是XML格式,但我无法弄清楚为什么会出现这种情况。

感谢任何答案。

1 个答案:

答案 0 :(得分:1)

你是对的,它不起作用的原因是返回数据不是XML格式。通常,如果Web服务器没有返回text/xml Content-Type标头,那么某些浏览器(以及jQuery)将不会打扰解析XML。

要使其发挥作用,您的选择是:

  1. 使用PHP's header() function修改响应标头以指定XML格式,然后更改响应以使其使用格式良好的XML。执行此操作的代码如下所示:

    header('Content-Type: text/xml; charset=UTF-8');
    echo "<?xml version=\"1.0\"?>
    <response status="ok">
      <time>$timestamp</time>
      <string>$mystring</string>
    </response>";
    
  2. 更改JavaScript代码中处理响应的方式(例如,编写一个简单的正则表达式解析器,尽管this is considered bad for your health

  3. 将您的回复更改为JSON之类的内容,以便您可以使用jQuery's $.getJSON() method发送请求并将响应解析为JavaScript对象(PHP has some very nice built-in JSON functions)。