$.post() sendet Daten nicht als json, sondern als x-www-form-urlencoded
Lesezeit: 2 Minuten
byte_slave
Dieser ist wirklich seltsam. Ich habe mehrere $.post() im Code, aber man weiß nicht, warum die JSON-Parameter als gesendet werden x-www-form-urlencoded stattdessen und funktioniert daher nicht.
Irgendwelche Ideen, warum das passiert? Ich habe auch den Typ als ‚json‘ erzwungen, funktioniert aber auch nicht.
James Kyburz
Wenn Sie die Daten als json senden möchten, verwenden Sie die $.ajax-Funktion
Sie können Typ post und dataType 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
},
});
OK. Ich habe den Ajax-Code möglicherweise von irgendwoher oder vielleicht von einer alten oder neueren Jquery-Version falsch kopiert, aber das Problem, warum Ajax als nicht funktionierend (siehe meinen Kommentar unter Olli-Antwort) bc im Typparameter war, hatte ich “JSON” anstelle von “POST”.
– byte_slave
3. April 2011 um 13:42 Uhr
dataType gibt den erwarteten Typ der an Antwort, nicht die Postdaten. Die Antwort von Olli ist richtig – Sie müssen $.ajax verwenden und die Option contentType angeben.
Da $.post() dient zum Senden von formularähnlichen Anfragen. $.ajax ist für das Senden, was Sie wollen. Sehen contentType in $.ajax Seite für weitere Informationen.
Zitieren:
Verwenden Sie diesen Inhaltstyp, wenn Sie Daten an den Server senden. Standard ist “application/x-www-form-urlencoded”, was für die meisten Fälle in Ordnung ist. Wenn Sie explizit einen Inhaltstyp an $.ajax() übergeben, wird dieser immer an den Server gesendet (auch wenn keine Daten gesendet werden). Daten werden immer mit UTF-8-Zeichensatz an den Server übertragen; Sie müssen dies serverseitig entsprechend entschlüsseln.
Post ist eine Abkürzung für $.ajax(), also sollte es funktionieren und ich habe es auch an einer anderen Stelle in meinem Code funktioniert …. genau hier scheint es zu scheitern. Der Grund, warum ich $.ajax() nicht verwende, liegt daran, dass im IE9-Kompatibilitätsmodus eine Ausnahme “SCRIPT87: Ungültiges Argument” ausgelöst wird. aber mit $.post() (abgesehen davon, dass es nicht funktioniert … das schüchtert meine Frage) wirft keinen Fehler.
– byte_slave
3. April 2011 um 13:37 Uhr
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
},
});
Sie können Ihre Daten auch in der Erfolgsfunktion als json erzwingen: data = JSON.parse(data);
12454100cookie-check$.post() sendet Daten nicht als json, sondern als x-www-form-urlencodedyes