如何“理解”我使用Ajax从PHP接收的数据?

时间:2014-02-11 15:39:37

标签: php jquery ajax

我正在做的是返回通过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”]更改显示的文本,希望它有效,但它没有。

如果有人能够了解我在做什么/我在这里做错了什么,我会非常感激。

谢谢!

3 个答案:

答案 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)

两件事:

  1. 在PHP脚本中使用json_encode对数据进行编码。
  2. jQuery将响应解释为字符串。您可以将响应字符串解析为JSON,也可以采用更简单的方法将AJAX请求设置为期望JSON。
  3. 所以:

    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'
});