wake-up-neo.net

$ .post () sendet Daten nicht als json, sondern als x-www-form-urlencoded

Dieser ist wirklich komisch. Ich habe mehrere $.post() im Code, aber es gibt keine Ahnung, warum die json-Parameter stattdessen als x-www-form-urlencoded Gesendet werden und daher nicht funktionieren.

Hier ist der Code:

$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data)
    {
        //DO STUFF
    });

Das XHR sieht in Firefox so aus: Firefox screenshot

Irgendwelche Ideen, warum das passiert? Ich habe den Typ auch als 'json' erzwungen, aber er funktioniert auch nicht.

32
byte_slave

Wenn Sie die Daten als JSON senden möchten, verwenden Sie die Funktion $ .ajax

Sie können den Typ post und den Datentyp json angeben.

$.ajax({
  url: "mydomain.com/url",
  type: "POST",
  dataType: "xml/html/script/json", // expected format for response
  contentType: "application/json", // send as JSON
  data: $.param( $("Element or Expression") ),

  complete: function() {
    //called when complete
  },

  success: function() {
    //called when successful
 },

  error: function() {
    //called when there is an error
  },
});

Entnommen aus der Ajax-Dokumentation

http://api.jquery.com/jQuery.ajax/

contentTypeString
Default: 'application/x-www-form-urlencoded; charset=UTF-8'
39
James Kyburz

Weil $. Post () zum Senden von formularartigen Anfragen dient. $. Ajax ist für das Senden, was Sie wollen. Siehe contentType in $.ajax Seite für weitere Informationen.

Zitat:

Verwenden Sie diesen Inhaltstyp, wenn Sie Daten an den Server senden. Die Standardeinstellung ist "application/x-www-form-urlencoded", was in den meisten Fällen in Ordnung ist. Wenn Sie einen Inhaltstyp explizit an $ .ajax () übergeben, wird er immer an den Server gesendet (auch wenn keine Daten gesendet werden). Daten werden immer mit dem UTF-8-Zeichensatz an den Server übertragen. Sie müssen dies auf der Serverseite entsprechend dekodieren.

8
Olli

sie können auch erzwingen, dass Ihre Daten in der Erfolgsfunktion json sind: data = JSON.parse(data);

1
obotezat

das funktioniert auch bei mir

$.ajax({
  url: "mydomain.com/url",
  type: "POST",
  dataType: "xml/html/script/json", // expected format for response
  contentType: "application/json", // send as JSON
  data: JSON.stringify(data),

  complete: function() {
    //called when complete
  },

  success: function() {
    //called when successful
 },

  error: function() {
    //called when there is an error
  },
});