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.

Relaterade artiklar