我沮丧地挠头,但我找不到答案。 我是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格式,但我无法弄清楚为什么会出现这种情况。
感谢任何答案。
答案 0 :(得分:1)
你是对的,它不起作用的原因是返回数据不是XML格式。通常,如果Web服务器没有返回text/xml
Content-Type标头,那么某些浏览器(以及jQuery)将不会打扰解析XML。
要使其发挥作用,您的选择是:
使用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>";
更改JavaScript代码中处理响应的方式(例如,编写一个简单的正则表达式解析器,尽管this is considered bad for your health)
$.getJSON()
method发送请求并将响应解析为JavaScript对象(PHP has some very nice built-in JSON functions)。