0

我有一个 ajax 调用返回热图数据的响应。

我遇到的问题是,要使用新数据更新热图,我必须使用来自 ajax 响应的数据调用一个函数。

这是代码:

    <script type="text/javascript">
var interval = setInterval(function() {
$.ajax({
type: "POST",
url: "update_1.php",
data: {},
cache: false,
success: function(html){
    var response = eval("(" + html + ')');
    $('#checker').html(html);
if(response.success)
    {
heatmap.store.setDataSet(response);
    }
}
}); }, 10000);

</script>

以及由 setDataSet() 调用的 ajax 调用返回的示例:

{max:30, data:[{ x: 480, y: 500, count: 27.00 },{ x: 250, y: 280, count: 26.00 },{ x: 480, y: 330, count: 21.00 },]}

我曾尝试使用 eval() 使其可用,但它不起作用。

有什么我想念的吗?

谢谢

4

2 回答 2

0

您的 AJAX 调用正在返回 JSON。要“使其可用”,您需要将其转换为 javascript 对象。有几种方法可以做到这一点,我想说最简单的是使用$.getJSON而不是 $.ajax。

[更新]

  • 正如 RobH 在评论中所说,确保您的 JSON 格式有效
  • if(response.success) 没有意义,我建议你简单地删除它
于 2013-07-22T21:24:29.680 回答
0

可能最简单的方法是使用:

var interval = setInterval(function() {
    $.ajax({
        type: "POST",
        url: "update_1.php",
        data: {},
        dataType: 'json',
        cache: false,
        success: function(data){
            heatmap.store.setDataSet(data);
        },
        error: function(xhr, error){
            console.log(xhr); 
            console.log(error);
        }
    }); 
}, 10000);

但是您的 JSON 必须是有效的,否则它将默默地失败。

您需要将密钥用引号括起来:在这里查看:http: //jsonlint.com

例如 { "max": 30, "data":[{ "x": 480, "y": 500, "count": 27.00 },{ "x": 250, "y": 280, "count": 26.00 },{ "x": 480, "y": 330, "count": 21.00 }]}

于 2013-07-22T21:35:42.967 回答