2009-08-20 4 views
5

Mi sono guardato intorno, e sto cercando di trovare una soluzione elegante a questo, e devo ancora trovarne uno. Ho un servizio web ASMX in .NET che sto cercando di chiamare che richiede parametri.Invio con virgolette singole usando jQuery, Ajax e JSON

sto usando jQuery sul lato client per chiamare il servizio e il mio codice jQuery simile a questa:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: "/Reviews/HotelReview.asmx/SubmitReview", 
    data: "{'name': '" + name + "', " + 
     "'info': '" info + "'}", 
    processData: true, 
    beforeSend: function() { startSubmit(); }, 
    complete: function() { submitComplete(); }, 
    error: function(xhr) { submitError(xhr); }, 
    success: function(msg) { submitSuccess(msg.d); } 
}); 

Funziona molto bene, tranne quando sia nome o informazioni contengono la ' carattere, una singola citazione. Abbastanza semplice, perché il mio JSON definisce la fine del valore del campo ed è una singola citazione. Quando uno di questi campi contiene un solo preventivo, tutto ciò che ottengo è un "Errore interno del server", ma un'ulteriore ispezione utilizzando Fiddler mi ha mostrato i risultati (non mi preoccuperò di pubblicarli) indicando il problema del preventivo singolo.

Ho messo qualcosa sul posto temporaneamente per rimuovere le virgolette singole sul lato client e reinserirle sul lato server, ma questo è tutt'altro che elegante. C'è un modo più elegante per sfuggire queste citazioni singole in modo che il mio codice possa funzionare?

risposta

9

Le specifiche dicono che in JSON è possibile utilizzare solo virgolette attorno a chiavi e valori, quindi provare con virgolette doppie. Sono abbastanza sicuro che il tuo errore sarà risolto.

si consiglia di utilizzare json.js per codificare/sfuggire caratteri speciali nei valori effettivi in ​​modo da non incorrere in problemi con i valori che contengono "per esempio, o il metodo stringa i da http://www.json.org/js.html.

+0

Grande risposta, grazie. Ho usato json.js e JSON.encode (myobject) invece di creare una stringa – Odd

+0

Nei browser che la supportano (tutti i browser della versione attuale) probabilmente dovresti preferire l'oggetto JSON nativo (http://blogs.msdn.com/ ie/archive/2008/09/10/native-json-in-ie8.aspx) se json.js non lo fa automaticamente. – EricLaw