2009-08-20 25 views
5

He echado un vistazo, y estoy tratando de encontrar una solución elegante para esto, y todavía tengo que encontrar una. Tengo un servicio web ASMX en .NET que estoy tratando de llamar que requiere parámetros.Envío con comillas simples usando jQuery, Ajax y JSON

estoy usando jQuery en el lado del cliente para llamar al servicio y mi código de jQuery es como la siguiente:

$.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); } 
}); 

Funciona muy bien, excepto cuando sea nombre o información contienen el ' caracter, una comilla simple. Bastante simple, porque mi JSON define el final del valor del campo y es una cita simple. Cuando cualquiera de estos campos contiene una comilla simple, todo lo que obtengo es un "Error interno del servidor", pero una inspección posterior usando Fiddler me mostró los resultados (no me molestaré en publicarlos) indicando el problema de la cita única.

He puesto temporalmente algo en su lugar para eliminar las comillas simples en el lado del cliente y ponerlas de nuevo en el lado del servidor, pero esto está lejos de ser elegante. ¿Hay alguna forma más elegante de evitar estas comillas simples para que mi código pueda funcionar?

Respuesta

9

Las especificaciones dicen que en JSON solo puede usar comillas dobles alrededor de las claves y los valores, intentelo con comillas dobles. Estoy bastante seguro de que tu error será resuelto.

es posible que desee utilizar json.js para codificar/escapar caracteres especiales en los valores reales para que no llegas a tener problemas con los valores que contienen ", por ejemplo, o el método de stringify http://www.json.org/js.html.

+0

gran respuesta, gracias. Usé json.js y JSON.encode (myobject) en lugar de compilar una cadena. – Odd

+0

En los navegadores que lo soportan (todos los navegadores de la versión actual) probablemente prefiera el objeto JSON nativo (http://blogs.msdn.com/ ie/archive/2008/09/10/native-json-in-ie8.aspx) si json.js no hace eso automáticamente. – EricLaw

Cuestiones relacionadas