2017-08-01 64 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。