Qualcuno può spiegare in modo semplice come effettuare jQuery
inviare lo json
effettivo anziché uno querystring
?jQuery ajax, come inviare JSON invece di QueryString
$.ajax({
url : url,
dataType : 'json', // I was pretty sure this would do the trick
data : data,
type : 'POST',
complete : callback // etc
});
Questa volontà, infatti, convertire il vostro preparato con cura json
ad un querystring
. Una delle cose più fastidiose è che qualsiasi array: []
nell'oggetto verrà convertito in array[]: []
, probabilmente a causa delle limitazioni dello querysting
.
-Ricalcola-
Il metodo corretto si possono trovare nelle risposte qui sotto:
$.ajax({
url : url,
dataType : 'json',
contentType: 'application/json; charset=UTF-8', // This is the money shot
data : data,
type : 'POST',
complete : callback // etc
});
Si prega di notare che questo richiede una corretta CORS intestazioni lato server, e contrariamente ad alcuni esempi in rete, Allow-Headersnon può utilizzare caratteri jolly. (Allow-Origin can.)
{
Content-Type : 'application/json',
Access-Control-Allow-Origin : '*',
Access-Control-Allow-Headers : 'Content-Type' // You cannot use '*'
}
-Ricalcola-
Si prega di notare chejQuery
sarà ora inviare due richieste, una per completare la stretta di mano e uno con il contenuto effettivo. Questo è normale comportamento di HTTP chiamato pre-volo. La prima richiesta sarà un'intestazione OPTIONS per determinare se il server è effettivamente compatibile con la richiesta pianificata.
Quindi, tenere a mente se si desidera che il server sia versatile, utilizzando un QueryString invia solo una richiesta. L'utilizzo di true JSON invia almeno due richieste, una per l'handshake.
Questo mi faceva impazzire, quindi ho pensato di farti sapere (il potenziale lettore) in anticipo.
Il 'dataType' non incide su come i dati vengono inviati. Specifica semplicemente quale tipo di dati ci si aspetta che abbia ** restituito ** dalla chiamata. Se vuoi indicare al server quale tipo di dati stai specificando nella proprietà 'data' devi impostare la proprietà' contentType' simile a 'contentType:" application/json "' – Nope
Grazie per aver chiarito. Ma in tal caso, perché devo specificare il tipo di risposta lato client se il server fornisce un'intestazione di tipo contenuto nella risposta? – Redsandro
Non si dispone * di * per specificarlo, per impostazione predefinita jQuery proverà a fare un'ipotesi intelligente basata sul tipo MIME della risposta. Tuttavia, specificandolo si sta dicendo esplicitamente a jQuery che tipo si sta aspettando dal server e jQuery tenterà di convertire la risposta in un oggetto di quel tipo. Non specificarlo e lasciare che jQuery faccia una congettura potrebbe far sì che jQuery converta la risposta in un formato imprevisto, anche se hai inviato JSON dal server. Controlla la documentazione per maggiori dettagli sul dataType: http://api.jquery.com/jQuery.ajax/ – Nope