Kann jemand auf einfache Weise erklären, wie jQuery tatsächlich JSON anstelle einer Abfragezeichenfolge senden kann?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Dadurch wird Ihr sorgfältig vorbereiteter JSON in eine Abfragezeichenfolge konvertiert. Eines der ärgerlichen Dinge ist, dass alle array: []
in Ihrem Objekt konvertiert werden array[]: []
, wahrscheinlich aufgrund von Einschränkungen des Abfragestichs.
javascript
jquery
json
query-string
Redsandro
quelle
quelle
dataType
hat keinen Einfluss darauf, wie die Daten gesendet werden. Es gibt lediglich an, welchen Datentyp der Aufruf voraussichtlich zurückgeben wird. Wenn Sie dem Serverdata
contentType
contentType: "application/json"
Antworten:
Sie müssen verwenden,
JSON.stringify
um Ihr Objekt zuerst in JSON zu serialisieren und dann das anzugeben,contentType
damit Ihr Server versteht, dass es JSON ist. Dies sollte den Trick tun:Beachten Sie, dass das
JSON
Objekt nativ in Browsern verfügbar ist, die JavaScript 1.7 / ECMAScript 5 oder höher unterstützen. Wenn Sie Legacy-Unterstützung benötigen, können Sie json2 verwenden .quelle
contentType: 'application/json'
.POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard
$_POST
PHP nur sehen könnenapplication/x-www-form-urlencoded
, wenn Sie JSON-Daten lesen möchten, die Sie tun müssen,file_get_contents("php://input")
und vielleicht dann ajson_decode()
Nein, die
dataType
Option besteht darin, die empfangenen Daten zu analysieren.Um JSON zu veröffentlichen, müssen Sie es selbst über kennzeichnen
JSON.stringify
und dieprocessData
Option auf setzenfalse
.Beachten Sie, dass nicht alle Browser das
JSON
Objekt unterstützen, und obwohl jQuery dies hat.parseJSON
, ist kein Stringifier enthalten. Sie benötigen eine weitere Polyfill-Bibliothek.quelle
processData
auffalse
ist nicht erforderlich, daJSON.stringify
bereits eine Zeichenfolge zurückgegeben wird.encodeURIComponent
ed, nicht wahr ?Obwohl ich weiß, dass viele Architekturen wie ASP.NET MVC über integrierte Funktionen verfügen, um JSON.stringify als Inhaltstyp zu behandeln, ist meine Situation etwas anders. Vielleicht kann dies in Zukunft jemandem helfen. Ich weiß, es hätte mir Stunden gespart!
Da meine http-Anforderungen von einer CGI-API von IBM (AS400-Umgebung) in einer anderen Subdomain verarbeitet werden, sind diese Anforderungen Ursprungsübergreifend, daher der jsonp. Ich sende meinen Ajax tatsächlich über Javascript-Objekte. Hier ist ein Beispiel für meinen Ajax POST:
quelle
Wenn Sie dies an asp.net zurücksenden und die Daten in request.form [] benötigen, müssen Sie den Inhaltstyp auf "application / x-www-form-urlencoded; charset = utf-8" setzen.
Originaler Beitrag hier
Zweitens: Entfernen Sie den Datentyp. Wenn Sie keine Rückgabe erwarten, wartet der POST etwa 4 Minuten, bevor er fehlschlägt. Siehe hier
quelle