2017-08-01 89 views
-1

今天,我正在第一次使用Ajax并面临一个奇怪的问题。在使用jQuery创建Ajax'POST'请求时,它会创建一些奇怪的语法。我还没有在其他问题中找到答案,实际上,我也不知道我应该寻找什么。jQuery Ajax Post更改对象结构

有了邮递员我用这个作为我的“POST”请求的主体:

{ 
    "name": "[email protected]", 
    "automaticDelete": false, 
    "cc": { 
     "ccFolder": false, 
     "smartDelete": false, 
     "deletionDays": 182 
    }, 
    "filters": [ 
    { 
     "id": 0, 
     "active": false 
    } 
    ] 
} 

当我使用GET得到的对象(不阿贾克斯)返回正是这一点。然而,当我使用POST与阿贾克斯,并通过相同GET方法,其他对象得到它,我收到这样的:

{ 
    "name": "[email protected]", 
    "automaticDelete": "false", 
    "cc[ccFolder]": "false", 
    "cc[smartDelete]": "false", 
    "cc[deletionDays]": "182", 
    "id": 4 
} 

我的jQuery代码看起来是这样的:

var emailAccount = { 
     "name": emailAddress.val(), 
     "automaticDelete": false, 
     "cc": { 
      "ccFolder": false, 
      "smartDelete": false, 
      "deletionDays": 182 
     }, 
     "filters": [] 
    }; 

    $.ajax({ 
     type: 'POST', 
     url: basicUrl + 'emails', 
     data: emailAccount, 
     success: function() { 
     ... 
     }, 
     error: function() { 
     ... 
     } 
    }); 

我有什么到目前为止已经试过:

  • 使用contentType: 'application/json'(导致了使用dataType: "json"
  • 500错误从JSON服务器)

所以我的问题是:这是什么?

"cc[ccFolder]": "false", 
"cc[smartDelete]": "false", 
"cc[deletionDays]": "182" 

为什么Ajax会像这样创建它?

我访问这样的代码:

function getData(path, followUp, id) { 
    var dataRequest = new XMLHttpRequest(); 
    dataRequest.open('GET', basicUrl + path); 

    dataRequest.onload = function() { 
     var receivedData = JSON.parse(dataRequest.responseText) 
     gotEmails(receivedData) 
    }; 

    dataRequest.send(); 
} 

function gotEmails(data) { 
    for (i = 0; i < data.length; i++) { 
     var userEmailAccount = { 
      id: data[i].id, 
      name: data[i].name, 
      automaticDelete: data[i].automaticDelete, 
      cc: data[i].cc, 
      filters: [] 
     }; 

     if (data[i].filters != 'undefined') { 
      var filterQuery = queryBuilder("filters?", data[i].filters); 
      getData(filterQuery, 9, data[i].id); 
     } 
    } 
} 
+0

你可以分享你如何访问响应吗?在上面的代码中没有看到。 – Jeremy

+0

我编辑了这个问题。我认为这是相关的代码。通过我在JSON中直接创建的所有数据以及通过Postman,它都能很好地工作。 – Brudus

+0

看起来它正在做文档所说的。 jQuery不会将对象转换为json。对象使用$ .param方法转换为参数字符串。 –

回答

0

我找到了工作液使用:的

var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance 
xmlhttp.open("POST", basicUrl + 'emails'); 
xmlhttp.setRequestHeader("Content-Type", "application/json"); 
xmlhttp.send(JSON.stringify(emailAccount)); 

而不是使用AJAX。