数据表发布请求参数不起作用

时间:2016-01-20 13:48:09

标签: javascript jquery ruby-on-rails angularjs ajax

我是AngularJS和DataTables的新手。我正在使用AngularJS前端和Rails后端进行项目。

我正在尝试使用AJAX POST方法在我的项目中使用DataTables,但DataTable AJAX POST方法正在发送数据参数常量。

当我使用正常的AJAX POST请求时,它可以正常工作。我不知道为什么DataTables POST AJAX无效。

请帮我解决这个问题。

在AngularJS中使用AJAX调用

$.ajax({
   data: JSON.stringify({
       "key1": "value1",
       "key2": "value2"
   }),
   headers: "application/json; charset=utf-8",
   success: function(data){
        console.log(data);
   },
   error: function(){
       console.log("error");
   },
   type: "POST",
   url: "http://localhost:3000/api"
 });

此代码AJAX POST。

它给出了正确的成功回应。

DataTables POST请求

$scope.studentList = {
   bFilter: false,
   paging:   false,
   bRetrieve : true,
   ajax: {
       data: JSON.stringify({
       "key1": "value1",
       "key2": "value2"
   }),
   headers: "application/json; charset=utf-8",
   success: function(data){
        console.log(data);
   },
   error: function(){
       console.log("error");
   },
   type: "POST",
   url: "http://localhost:3000/api"
   processData: false,
 },
 columns: [
     {}]
};

它在服务器端抛出以下错误。我的代码中有错误吗?

解析请求参数时出错。

内容:

  

0 =%7B&安培; 1 =%22和2 = S和3 = T和4 = A和5 = N和6 = d及7 =一个和8 =的R& 9 = d及10 = 和11 = I&安培; 12 = d&安培; 13 =%22和14 =%3A和; 15 = 4和16 = 0&安培; 17%2C和18 =%22安培; 19 = S&安培; 20 = E&安培; 21 = C&安培; 22 = T&安培; 23 = I&安培; 24 =的O& 25 = N&安培; 26 = &安培; 27 = I&安培; 28 = d&安培; 29 =%22安培; 30 =%3A及31条= 8&安培; 32%2C&安培; 33 =%22及34 = Y及35 = E&安培; 36 = A&安培; 37 =的R& 38 =%22及39 =%3A和; 40 = 2及41 = 0&安培; 42 = 1&安培; 43 = 6&安培; 44 = %2C&安培; 45 =%22安培; 46 = M&安培; 47 =的O& 48 = N&安培; 49 = T&安培; 50 = H&安培; 51 =%22安培; 52 =%3A和; 53 = 2及54%2C&安培; 55 =% 22安培; 56 = d&安培; 57 = A&安培; 58 = T&安培; 59 = E&安培; 60 =%22安培; 61 =%3A和; 62 = 1&安培; 63 = 8&安培; 64 =%7D

即使我使用 processData:false 选项,它仍会在服务器端抛出以下错误。

解析请求参数时出错。

内容:

  

[object Object]

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

尝试删除JSON.stringify。数据表或ajax在内部处理JSON解析/字符串化。

答案 1 :(得分:0)

在dataTables中,您不能在数据中传递字符串,您需要一个函数:

var dataObject = {
   "key1": "value1",
   "key2": "value2"

};

 var table = $('#exampleTable').DataTable({
        ajax: {
            "url" : "urlExample.com",
            "type" : "POST",
            "data" : function ( d ) {
                $.extend( d, dataObject );
                return JSON.stringify( d );
            },
            "dateType" : "json",
            "contentType" : "application/json; charset=utf-8"
        });

答案 2 :(得分:0)

改用它:

$('#example').dataTable( {
      "ajax": {
        "url": "data.json",
        "contentType": "application/json",
        "type": "POST",
        "data": function ( d ) {
          return JSON.stringify( d );
        }
      }
    } );