我正在做的是返回通过PHP cURL获得的RSS提要。我返回$ returnedData,这是一个看起来像这样的关联数组:
array(2){
["lastupdate"] => string(29) "Tue, 11 Feb 2014 15:25:42 GMT"
["feed"] => array(20) {
<items contained within ["feed"][0] to ["feed"][19] (very large)>
}
}
我尝试在将它返回Ajax之前运行 json_encode ,但它实际上只是将我的数组转换为一个大字符串。我的Ajax如下:
$.ajaxSetup ({
cache: false
});
request = $.ajax ({
type: "GET",
url: "dataFetcher.php",
data: arg,
});
request.done(function(response){
var resultsArray = response;
$("#message").text(resultsArray);
});
request.fail(function (jqXHR, textStatus, errorThrown){
// log the error to the console
console.error(
"The following error occured: "+
textStatus, errorThrown
);
});
问题是,我并不完全知道我正在获得什么。如果我执行var_dump($ returnedData)而不是返回$ returnedData,我知道我得到一个字符串。但是,如果我只返回$ returnedData,我无法分辨Ajax正在接收什么。我尝试使用resultsArray [0]或resultsArray [1]或resultsArray [“lastupdate”]更改显示的文本,希望它有效,但它没有。
如果有人能够了解我在做什么/我在这里做错了什么,我会非常感激。
谢谢!
答案 0 :(得分:2)
AJAX接收服务器发送的响应。我不是一个PHP程序员,但是从我读过的其他SO问题开始,你需要做类似的事情:
echo json_encode($returnedData)
在PHP脚本中。 echo
表示它是输出的一部分,json_encode
将您的PHP数组转换为JSON字符串,该字符串以JavaScript实际理解的方式表示数组。
根据PHP中的响应集的标头,jQuery可能会也可能不会自动将字符串解析为JSON,将生成的对象/数组传递给成功处理程序(作为第一个参数的值)而不是仅仅传递字符串响应。您可以通过在dataType
调用中设置$.ajax()
属性来告诉它(如果您知道响应将/应该是JSON):
request = $.ajax ({
type: "GET",
url: "dataFetcher.php",
data: arg,
dataType: 'json'
});
然后在done
处理程序函数response
内部将是与PHP数组匹配的JavaScript对象。
答案 1 :(得分:1)
两件事:
json_encode
对数据进行编码。所以:
request = $.ajax ({
type: "GET",
url: "dataFetcher.php",
data: arg,
dataType: 'json' // <--- Your response parameter will be in JSON format by default, now.
});
答案 2 :(得分:0)
您需要评估对javascript对象的回复
request.done(function(response){
var resultsArray = response.evalJSON();
$("#message").text(resultsArray);
});
或在ajax调用内定义你将收到json
request = $.ajax ({
type: "GET",
url: "dataFetcher.php",
data: arg,
dataType: 'json'
});