2009-11-17 13 views
54

Sto provando a mettere alcuni dati in formato JSON tramite Ajax con jQuery su un server. Il mio codice è simile al seguente:jQuery - Come mettere JSON via Ajax?

$.ajax({ 
    type: "PUT", 
    url: myURL, 
    contentType: "application/json", 
    data: {"data": "mydata"} 
}); 

Ma sul lato server, ricevo una stringa data=mydata, al posto del JSON previsto. Firebug mi dice lo stesso.

Dove si trova l'errore?

+0

Che cosa stai usando sul lato server? –

+0

Io uso Couchdb che si aspetta JSON. –

+6

AJAX PUT * è * disponibile in tutti i principali browser. HTTP PUT non lo è. Quindi in questo caso, va bene (consigliato, anche) usare PUT. –

risposta

46

Penso che i dati debbano essere una stringa. Gli oggetti vengono convertiti in stringhe di query, che è ciò che stai vedendo qui.

È possibile utilizzare il metodo JSON.stringify(obj) per convertire il proprio oggetto in una stringa. Il codice per l'oggetto JSON è disponibile da: https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

In alternativa, è sufficiente passare il codice che si sta utilizzando per creare l'oggetto come stringa letterale, ma immagino che questo sia solo un esempio e che desideri codificare alcuni oggetti che hai già creato.

+1

Questo è il modo in cui @Juri dovrebbe andare se vuole JSON sul server. Uso sempre la libreria json2.js e funziona alla grande. –

+3

sarebbe bello se jQuery stringa i dati, proprio come fa con il POST. – neoneye

+1

Link aggiornato: https://github.com/douglascrockford/JSON-js/blob/master/json2.js – Ben

30

Se si deve sempre inviare JSON nell'applicazione, è possibile eseguirlo da qualche parte in init e quindi utilizzare la chiamata predefinita $.ajax come nell'esempio e verrà sempre serializzata come stringa JSON anziché come valore predefinito di Ajax stringa della domanda.

Qui uso l'oggetto JSON di cui sopra:

$.ajaxSetup({ 
    contentType : 'application/json', 
    processData : false 
}); 
$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (options.data){ 
     options.data=JSON.stringify(options.data); 
    } 
}); 
1
//url: this is a reference to the XML, where you need to define the mapping. 
//<entry key="/getEmpDetails/transEfileGenerate.app"> 
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate" 
//p:action="passJSONObjectAndGetWebServiceOutput" /> 

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response. 
//</entry> 

var kw = { 
    url : "getEmpDetails/transEfileGenerate.app", 
    timeout : 30000, 
    handleAs : "json", 
    sync: false, 
    putData : str1, 
    headers: { "Content-Type": "application/json"}, 
    load : function(result) { 
}, 
Problemi correlati