0

我是新手,所以轻松一点:

我不明白为什么这个 $.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。我知道数据已正确存储在对象中,因为我可以在萤火虫中看到它...

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

我只是不明白我做错了什么。任何指针?

4

2 回答 2

2

该代码示例存在 XSS 漏洞(如果名称中包含“<”字符怎么办?)。

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

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

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

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

于 2012-04-24T02:20:06.603 回答
1

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

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

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

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

于 2012-04-24T02:12:06.730 回答