从外部PHP刷新JSON

时间:2013-07-17 10:42:27

标签: php ajax json jqgrid refresh

我想每秒刷新从外部PHP页面获取的数据。 PHP发送JSON数据,通过AJAX调用检索。使用此代码,我正确地看到了表格,但我需要刷新浏览器以查看新数据。

$(document).ready(function() {
    $("#list").jqGrid({
        url: 'get_data.php',
        datatype: 'json',
        mtype: 'GET',
        jsonReader: {
            repeatitems : false,
        },
        colNames: [.............],
        colModel: [.............],
        autowidth: true,
        height: 'auto',
        loadonce: true,
        key: true,
        altRows: true,
        altclass: 'odd',
        rowNum: 100,
        viewrecords: true,
        gridview: true,
        gridComplete: function(){
            if(this.x == undefined){
                var j = 0;
                this.x = 1;
                while(j < mydata2.length){
                    jQuery("#list").addRowData(mydata2[j].id, mydata2[j]);
                    j++;
                }
            }
            return true;
        }
    })
});

要更新我已经尝试过的数据:

var $grid = $("#list"), timer;
timer = setInterval(function () {
    $grid.trigger('reloadGrid', [{current: true, datatype: 'json', url: 'get_data.php'}]);
}, 1000);

而且:

var refreshId = setInterval(function() {
    // ... jqGrid function ...
}, 1000);

但都没有奏效。

1 个答案:

答案 0 :(得分:0)

主要错误是使用datatype: 'json', url: 'get_data.php'作为reloadGrid的选项。方法reloadGrid只能理解两个选项:currentpage(请参阅the answer)。由于使用datatype,您需要重置jqGrid的loadonce: true选项。所以你需要替换

$grid.trigger('reloadGrid',
    [{current: true, datatype: 'json', url: 'get_data.php'}]);

setInterval内部调用以下内容

$grid.jqGrid("setGridParam", {datatype: "json"})
   .trigger("reloadGrid", [{current: true}]);

它应该解决您刷新数据的主要问题。另外我建议你检查我怀疑的gridComplete代码。我不完全明白。您应该考虑addRowData调用调用updatepager的内部gridComplete方法,然后进行递归(请参阅the line of codethe answer)。