2013-07-22 87 views
0

我有一個ajax調用返回熱圖數據的響應。在javascript函數中使用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> 

並從AJAX調用返回的一個例子由setDataSet被調用():

{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()來使它可用但它不起作用。

有什麼我失蹤?

謝謝

+0

什麼問題? – SLaks

+0

對不起,setDataSet沒有用新數據更新熱圖。 – Jimbob

+0

dataType:「json」,並使用:response.max。或者resp = $ .parseJSON(response); – ZloyPotroh

回答

0

您的AJAX調用正在返回JSON。要「使其可用」,您需要將其轉換爲JavaScript對象。有幾種方法可以做到這一點,我想說最簡單的方法是使用$.getJSON而不是$ .ajax。

[更新]

  • 作爲RobH在評論中說,請確保您的JSON格式有效
  • 如果(response.success)是沒有意義的,我建議你直接刪除它
+0

$ .getJSON根本不會做任何事....... – Jimbob

+1

@Jimbob它將失敗,因爲您的JSON無效。 – RobH

+0

+1 RobH評論,您返回的數據具有不尋常的格式。例如,我期望max,data,x,y,count在引號之下,這將是一個標準格式(JSON)。 – Christophe

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 }]}

+0

是的,我已經把它的所有反應成引號,但仍然無法正常工作..... – Jimbob

+0

@Jimbob - 你需要看看AJAX調用失敗或您的'heatmap.store.setDataSet()'是否有問題。向AJAX呼叫添加失敗回調。 – RobH

+0

看起來setDataSet()有問題,因爲ajax沒有失敗 – Jimbob