json数据对象不会被追加

时间:2012-04-24 01:48:22

标签: php jquery ajax json

我是个新人,所以放轻松:

我无法弄清楚为什么这个$ .ajax函数不会将我的xhr数据附加到正确的位置。

    // gets the cache data from our php file
function getcaches() {
    $.ajax({
        method: 'get',
        url: "php/findcache.php",
        dataType: "json", // return type data is json
        success: function(data){ // <-- data is in json format
            //parse the json data
            $('#caches').append($('<p>' + data[0].name + '</p>'));
        },
        error: function(data) {
            console.log('error');
        }
    });
    return false;   
}

这是相关的javascript。我知道数据正确存储在对象中,因为我可以在firebug中看到它......

[OU0397] => stdClass Object
    (
        [code] => OU0397
        [name] => A Mighty Oak in the Open
        [location] => 28.527633|-81.125167
        [type] => Virtual
        [status] => Available
    )

我只是不明白我做错了什么。有什么指针吗?

2 个答案:

答案 0 :(得分:2)

代码示例有XSS漏洞(如果名称中包含“&lt;”字符,该怎么办?)。

如果没有正确的HTML编码,请不要将文本值添加到HTML。您可以使用jQuery的text()方法来设置元素文本而不是连接字符串。

$('#caches').append($('<p/>').text(data[0].name));

这可能是您的输出不正确的原因之一。

您可以通过执行$('#caches')从Firebug或Chrome开发人员工具调试您的jQuery CSS选择器,它将返回匹配元素的数组。

答案 1 :(得分:1)

如果您有Firebug,请在此处设置断点:

$('#caches').append($('<p>' + data[0].name + '</p>'));

然后你检查data。您的调试数据显示OU0397为关键字;由于PHP的json_encode,这意味着您可能会获得一本字典。字典以不同的方式遍历(例如for i in data { ... })。

您还可以考虑更改PHP以仅返回第一个结果;这简化了JavaScript并减少了网络开销(例如使用json_encode(current($data)))。