1

私はすばらしい datatables jquery プラグインを使用していますが、テーブルのレンダリングに問題があります。

次のコードがあります。

$(document).ready(function() {
var jsonEmp="";
$.getJSON("../lib/violation_select_emp.php", function(json) {
    jsonEmp = json;
}); 

var oTable;
oTable = $('#uview').dataTable({
    "bStateSave":true,
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "../lib/server_processing_emp_list.php",
    "sPaginationType": "four_button",
    "aaSorting": [[ 0, "asc" ]],
    "aoColumns": [
    {
        "fnRender": function ( oObj ) {
         var empID=oObj.aData[4];
         var empName=oObj.aData[5];
         return "<a href='viewEmployer.php?empID="+empID+"'>"+empName+"</a>";
    }
    },
    {
        "fnRender": function ( oObj ) {
            var numAlerts=jsonEmp.length;
            var i=0;
            var alerts=0;
            while(i<numAlerts){
            if(jsonEmp[i]==oObj.aData[3]){
                alerts++;
            }
            i++;
    }
    return alerts;
    }
});
});

ページを読み込むと、fnrender の列には何も表示されませんが、次のページ編集ボタンを押してから前のページ編集ボタンを押すと、探している情報が表示されます。

私の理論では、テーブルを更新する必要がありますが、そうすると同じことが起こります。

どうすればいいのかわからないので、誰かが私を助けてくれることを願っています。

4

1 に答える 1

2

$.getJSON のコールバック関数があります。コールバック関数で、"" で初期化された jsonEmp 変数に値を割り当てます。コードは、リクエストを送信している Web サイトからの応答を待機しません。$.getJSON の下の Javascript コードは、ページが応答するのを待機しないため、実生活を割り当てる前に jsonEmp を使用するとバグが発生します。それに値します。

提案:

$(document).ready(function() {
var jsonEmp="";
var oTable;
$.getJSON("../lib/violation_select_emp.php", function(json) {
    jsonEmp = json;
oTable = $('#uview').dataTable({
    "bStateSave":true,
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "../lib/server_processing_emp_list.php",
    "sPaginationType": "four_button",
    "aaSorting": [[ 0, "asc" ]],
    "aoColumns": [
    {
        "fnRender": function ( oObj ) {
         var empID=oObj.aData[4];
         var empName=oObj.aData[5];
         return "<a href='viewEmployer.php?empID="+empID+"'>"+empName+"</a>";
    }
    },
    {
        "fnRender": function ( oObj ) {
            var numAlerts=jsonEmp.length;
            var i=0;
            var alerts=0;
            while(i<numAlerts){
            if(jsonEmp[i]==oObj.aData[3]){
                alerts++;
            }
            i++;
    }
    return alerts;
    }
});
}); 

});

ご覧のとおり、オブジェクトの初期化をコールバック関数に入れました。問題は初期化に起因すると考えていますが、コードをテストしていません。私の提案の結果を教えてください。

幸運を!

于 2012-09-10T17:16:20.383 に答える