1

外部の PHP ページから取得したデータを毎秒更新したいと考えています。PHP は、AJAX 呼び出しで取得した JSON データを送信します。このコードではテーブルが正しく表示されますが、新しいデータを表示するにはブラウザーを更新する必要があります。

$(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);

しかし、どちらも機能しませんでした。

4

1 に答える 1

0

主なエラーは、datatype: 'json', url: 'get_data.php'のオプションとしての使用ですreloadGrid。メソッドreloadGridは 2 つのオプションのみを理解します:currentpage(答えを参照してください)。必要なのは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

于 2013-07-17T11:52:10.957 に答える