2012-11-12 65 views
0

下面是腳本:數據從JSON獲取不會得到更新

$(document).ready(function() { 
    $.getJSON('table.json', function (data) { 
     $('#mytable').empty(); 
     var html = ''; 
     html += '<tr class="tableheader"><th>Name</th><th>Code</th><th>Value</th><th>Bid</th><th>Offer</th></tr>'; 
     for (var i = 0, size = data.length; i < size; i++) { 
      html += '<tr class="tablecontent"><td>' + data[i].name + '</td><td>' + data[i].code + '</td><td>' + data[i].value + '</td><td>' + data[i].bid + '</td><td>' + data[i].offer + '</td></tr>'; 
     } 
     $('#mytable').append(html); 
     tablerows('mytable'); 
     setTimeout(poll, 5000); 
    }); 
}); 
var poll = function() { 
    alert("poll"); 
    $.getJSON('dummy.json', function (data) { 
     setTimeout(poll, 5000); 
    }); 
} 

我想更新我的數據。 poll函數每隔5秒鐘就會被調用,我通過alert進行了檢查。但數據沒有得到更新。請告訴我我做錯了什麼。

+0

內嵌HTML創作是壞的 - 看進入微模板。投票也不好,看看彗星/ websockets。 – moonwave99

+0

幫你一個忙,不要使用alert()來驗證。找到您的瀏覽器的開發者控制檯,並使用'console.log()'或其他'console'工具。然後你可以'console.log(data)',你就可以看到問題所在。 –

+1

在投票功能中,你沒有改變任何東西,你怎麼知道數據是否沒有得到更新? – Jarry

回答

1

getJSON是一個GET請求,所以它會被緩存。在服務器上設置適當的no緩存標頭。

另外,也要看看你的代碼,你永遠不會處理的數據

var poll = function() { 
    alert("poll"); 
    $.getJSON('dummy.json', function (data) { 
     setTimeout(poll, 5000); //<--where is the processing you do nothing with the response??? 
    }); 
} 
1
$(document).ready(function() { 
     // make the initial JSON request 
    $.getJSON('table.json', init) 
}); 

function poll() { 
     // make the subsequent JSON requests 
    $.getJSON('dummy.json', update); 
} 

function init(data) { 
    $('#mytable').empty(); 
    var html = ''; 
    html += '<tr class="tableheader"><th>Name</th><th>Code</th><th>Value</th><th>Bid</th><th>Offer</th></tr>'; 
    for (var i = 0, size = data.length; i < size; i++) { 
     html += '<tr class="tablecontent"><td>' + data[i].name + '</td><td>' + data[i].code + '</td><td>' + data[i].value + '</td><td>' + data[i].bid + '</td><td>' + data[i].offer + '</td></tr>'; 
    } 
    $('#mytable').append(html); 
    tablerows('mytable'); 
    setTimeout(poll, 5000); 
} 

function update(data) { 
    var rows = $("#mytable tr.tablecontent").toArray(); 
    for (var i = 0, size = data.length; i < size; i++) { 
     if (rows[i]) 
      rows[i].cells[3].firstChild.data = data[i].bid; 
    } 
    setTimeout(poll, 5000); 
} 

這裏的update功能與更多的jQuery:

function update(data) { 
    $("#mytable tr.tablecontent > td:nth-child(4)") 
     .slice(0, data.length) 
     .text(function(i) { 
      return data[i].bid; 
      }); 
    setTimeout(poll, 5000); 
} 
+0

你爲什麼不在調用函數中調用poll? :) – epascarello

+0

@epascarello:我最初有'.ready(poll)',但後來發現'getJSON'請求的URL是不同的。作爲替代方案,我可以用'poll'作爲參數。 –

+0

啊,我沒有發現不同的網址,我打賭從OP中輸入錯字。 – epascarello