javascript - Hur skickar man JSON istället för en frågesträng med $.ajax?
Kan någon förklara på ett enkelt sätt hur man får jQuery att skicka riktig JSON istället för en frågesträng?
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Detta kommer faktiskt att konvertera ditt noggrant förberedda JSON till en frågesträng. En av de irriterande sakerna är att alla array: [] i ditt objekt kommer att konverteras till array[]: [], troligen på grund av begränsningar i frågesträngen.
Svar #1
Du behöver använda JSON.stringify för att först serialisera ditt objekt till JSON, och sedan ange contentType så att din server förstår att det är JSON. Detta borde lösa problemet:
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
contentType: "application/json",
complete: callback
});
Observera att JSON-objektet finns inbyggt i webbläsare som stöder JavaScript 1.7/ECMAScript 5 eller senare. Om du behöver stöd för äldre versioner kan du använda json2.
Svar #2
Nej, dataType-alternativet är för att analysera de mottagna uppgifterna.
För att posta JSON måste du själv omvandla det till en sträng via JSON.stringify och ställa in alternativet processData till false.
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
processData: false,
contentType: "application/json; charset=UTF-8",
complete: callback
});
Observera att inte alla webbläsare stöder JSON-objektet, och även om jQuery har .parseJSON, har det ingen inbyggd stringify-funktion; du kommer att behöva ett annat polyfill-bibliotek.
