2017-08-01 1 views
-1

Heute arbeite ich das erste Mal mit Ajax und mit einem seltsamen Problem konfrontiert. Bei der Verwendung von jQuery zum Erstellen einer AJAX POST-Anforderung wird eine seltsame Syntax erstellt. Ich habe darauf in anderen Fragen keine Antwort gefunden, eigentlich weiß ich auch nicht, wonach ich suchen soll.jQuery Ajax Post ändert Objektstruktur

Mit Postman habe ich dies als den Körper meiner ‚POST‘ Anfrage:

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

Wenn ich GET die Objekte erhalten (ohne Ajax) es gibt genau diese. Allerdings, wenn ich POST mit Ajax verwenden und es durch die gleichen GET Verfahren wie die anderen Objekte, ich erhalten diese:

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

Mein jQuery-Code wie folgt aussieht:

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() { 
     ... 
     } 
    }); 

Was ich habe bisher versucht:

  • dataType: "json" mit
  • mit contentType: 'application/json' (führt zu einer 500 Fehler von json-server)

Also meine Frage ist: Was ist das?

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

Und warum erstellt Ajax es so?

greife ich auf den Code wie folgt:

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

statt mit 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

Können Sie mitteilen, wie Sie auf die Antwort zugreifen? Sehe das im obigen Code nicht. – Jeremy

+0

Ich habe die Frage bearbeitet. Ich denke, das ist der relevante Code. Mit all den Daten, die ich direkt im JSON und über Postman erstelle, klappt es ganz gut. – Brudus

+0

Sieht so aus, als ob es genau das tut, was die Dokumentation sagt. jQuery konvertiert keine Objekte für Sie in json. Objekte werden mithilfe der $ .param-Methode in Parameterzeichenfolgen konvertiert. –

Antwort

0

I unter Verwendung einer Arbeitslösung gefunden.