2017-03-02 10 views
0

私は、DataTableプラグインに基づいたAjaxテーブルを持っています。これは、localStorageで検索パラメータを保持します。今はすべて良い。AjaxコールでoData(DataTableから)を「データ」として送信するにはどうすればよいですか?

A) console.debug(ODATA)が返されます。

var ShowUsers = function() { 

    var Users = function() { 

     var grid = new Datatable(); 

     grid.init({ 
      src: $("#datatable_ajax") 

      dataTable: { 
       // save datatable state(pagination, sort, etc) in cookie. 
       "bStateSave": true, 

       // save custom filters to the state 
       "fnStateSaveParams": function (oSettings, sValue) { 
        $("#datatable_ajax tr.filter .form-control").each(function() { 
         sValue[$(this).attr('name')] = $(this).val(); 
        }); 

        return sValue; 
       }, 

       // read and populate the filter inputs 
       "fnStateLoadParams": function (oSettings, oData) { 
        //Load custom filters 
        $("#datatable_ajax tr.filter .form-control").each(function() { 
         var element = $(this); 
         if (oData[element.attr('name')]) { 
          element.val(oData[element.attr('name')]); 
         } 
        }); 

        return true; 
       }, 

       "ajax": { 
        "url": "/admin/users", // ajax source 
        "data": { 
         name: oData.user_name // here is the problem 
        }, 
        "headers": { 
         'X-CSRF-TOKEN': '{{ csrf_token() }}' 
        } 
       } 
      } 
     }); 
    } 

    return { 
     init: function() { 
      Users(); 
     } 
    }; 
}(); 

jQuery(document).ready(function() { 
    ShowUsers.init(); 
}); 

私がしようとすると、問題が表示されます。

Object 
    ... 
    time : 1488468181954 
    name : "John Doe" 
    ... 

B)そして、ここには私のスクリプトですoDataをAjax呼び出しの変数として使用します。

"fnStateLoaded": function (oSettings, oData) { 
    // Ajax here 
}, 

を...しかし、私は維持するアヤックスを必要とするので、それは無意味です:

"ajax": { 
    ... 
    "data": { 
     name: oData.user_name // return the Undefined error 
    }, 
    ... 
} 

私は多くのソリューションをしようとしていた、最高のは、これまでのところ、それはでアヤックスをロードするようにした、このように、をfnStateLoaded "ajax":{}なし$ .ajax({});

これは、oDataを取得して使用する方法に関するアドバイスですか?

PS:私は右の入力からデータを取得しようとしましたが、その時にfnStateLoadParamsが入力にデータを渡すことが出来なかったので、$(「入力[名前= USER_NAME]」)のval(。 );を返します。も定義されていません。

ありがとうございます。

デビッド

+0

'名:JSON.stringify(oData.user_name)'?たぶん... –

+0

まだ返されません:**未知のReferenceError:oDataは定義されていません** – GAD

+1

これはあなたのために興味深いかもしれません:http://vpllan.github.io/jQuery.dataTables.oData/ –

答えて

0

私はこの問題のために清潔で簡単な解決策を見つけました。

grid.getDataTable().ajax.params();

IはODATAを得た後、私はこのようにAjaxのに渡し:

var Users = function() { 
    ... 
} 

oData = grid.getDataTable().ajax.params(); // get oData 
grid.setAjaxParam("name", oData.name); // pass the parameter 
grid.getDataTable().ajax.reload(); // reload the table 
1

あなたはグローバル変数へoDataを割り当てたり、Ajax呼び出しに最後にロードされた状態を取得するためにstate.loaded() APIメソッドを使用することができます。例えば

"ajax": { 
    "url": "/admin/users", // ajax source 
    "data": function(data, settings){ 
     var api = new $.fn.dataTable.Api(settings); 

     var state = api.state.loaded(); 
     if(state.hasOwnProperty('user_name')){ 
      data.name = state.user_name; 
     } 
    }, 
    "headers": { 
     'X-CSRF-TOKEN': '{{ csrf_token() }}' 
    } 
} 
関連する問題