Warum Code unten gesendete Daten City=Moscow&Age=25
anstelle des JSON-Formats?
var arr = {City:'Moscow', Age:25};
$.ajax(
{
url: "Ajax.ashx",
type: "POST",
data: arr,
dataType: 'json',
async: false,
success: function(msg) {
alert(msg);
}
}
);
javascript
jquery
ajax
Neir0
quelle
quelle
data
dass in das Abfragezeichenfolgenformat konvertiert wirdprocessData: false
. Siehe api.jquery.com/jquery.ajax/#sending-data-to-serverAntworten:
Da Sie weder den Anforderungsinhaltstyp noch die korrekte JSON-Anforderung angegeben haben. Hier ist der richtige Weg, um eine JSON-Anfrage zu senden:
var arr = { City: 'Moscow', Age: 25 }; $.ajax({ url: 'Ajax.ashx', type: 'POST', data: JSON.stringify(arr), contentType: 'application/json; charset=utf-8', dataType: 'json', async: false, success: function(msg) { alert(msg); } });
Dinge zu beachten:
JSON.stringify
Methode zum Konvertieren eines Javascript-Objekts in eine native JSON-Zeichenfolge, die in moderne Browser integriert ist. Wenn Sie ältere Browser unterstützen möchten, müssen Sie möglicherweise json2.js einschließencontentType
Eigenschaft, um dem Server die Absicht anzuzeigen, eine JSON-Anforderung zu sendendataType: 'json'
Eigenschaft wird für den Antworttyp verwendet, den Sie vom Server erwarten. jQuery ist intelligent genug, um es aus dem Server- Antwortheader zu erratenContent-Type
. Wenn Sie also einen Webserver haben, der das HTTP-Protokoll mehr oder weniger respektiert und aufContent-Type: application/json
Ihre Anfrage reagiert , analysiert jQuery die Antwort automatisch in ein Javascript-Objekt imsuccess
Rückruf, sodass Sie diedataType
Eigenschaft nicht angeben müssen .Dinge, bei denen Sie vorsichtig sein sollten:
arr
ist kein Array . Es ist ein Javascript-Objekt mit Eigenschaften (City
undAge
). Arrays sind[]
in Javascript mit gekennzeichnet. Zum Beispiel[{ City: 'Moscow', Age: 25 }, { City: 'Paris', Age: 30 }]
ist ein Array von 2 Objekten.quelle
Weil jQuery standardmäßig Objekte serialisiert, die als
data
Parameter an übergeben werden$.ajax
. Es wird verwendet$.param
, um die Daten in eine Abfragezeichenfolge zu konvertieren.Aus den jQuery-Dokumenten für
$.ajax
:Wenn Sie JSON senden möchten, müssen Sie es selbst codieren:
data: JSON.stringify(arr);
Beachten Sie, dass dies
JSON.stringify
nur in modernen Browsern vorhanden ist. Informationen zur Legacy-Unterstützung finden Sie in json2.jsquelle
Ich habe eine kurze Convenience-Funktion zum Posten von JSON geschrieben.
$.postJSON = function(url, data, success, args) { args = $.extend({ url: url, type: 'POST', data: JSON.stringify(data), contentType: 'application/json; charset=utf-8', dataType: 'json', async: true, success: success }, args); return $.ajax(args); }; $.postJSON('test/url', data, function(result) { console.log('result', result); });
quelle
Sie müssen den richtigen Inhaltstyp festlegen und Ihr Objekt stringifizieren.
var arr = {City:'Moscow', Age:25}; $.ajax({ url: "Ajax.ashx", type: "POST", data: JSON.stringify(arr), dataType: 'json', async: false, contentType: 'application/json; charset=utf-8', success: function(msg) { alert(msg); } });
quelle
Es wird serialisiert, sodass der URI standardmäßig die Name-Wert-Paare in der POST-Anforderung lesen kann. Sie können versuchen, processData: false für Ihre Parameterliste festzulegen. Ich bin mir nicht sicher, ob das helfen würde.
quelle