2011-03-10 22 views
5

tengo este código (abajo) ..Jquery datos ajax codificación

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + encodeURIComponent(note) + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
    contentType: "application/json; charset=utf-8" 
}); 

estoy usando este para pasar los datos a un servicio web, pero el problema es que si hay caracteres de allí como este (, /?: @ & = + $ #). He puesto un encodeURIComponent que funciona bien y luego en el servicio web los devuelvo.

Lo que estoy preguntando es si hay una forma mejor de lograr esto? Parece un poco loco que tengo para codificar la cadena cada vez que antes de pasarlo a través ..

Gracias

+0

¿Por qué parece una locura? ¿no es normal transferir datos de forma segura? – yoavmatchulsky

+0

Entonces, ¿qué estás diciendo es que estos personajes no son seguros para pasar a un servicio web? ¿Qué daño podrían hacer? – tmutton

+2

$ .ajax va a hacer la codificación automáticamente de todos modos, ¿no? –

Respuesta

4

es el servicio web pertenecen a usted o usted utiliza algún otro servicio web? ¿Cuál fue la razón por la cual el servicio web no acepta (, /?: @ & = + $ #)?

jQuery $ .ajax contentType predeterminado es application/x-www-form-urlencoded que significa jQuery codificará el contenido. Sin embargo, como ha especificado diferentes contentType, los datos no están codificados, por lo tanto, debe hacer su propia codificación.

Alternativamente, usted podría tratar de eliminar la opción contentType y procesar el contenido normalmente (sin encodeURICompnent).

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + note + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
}); 
+0

Acabo de probarlo de nuevo y parece que no funciona ... He intentado exactamente el código anterior (sin el contentType) y pasado en una cadena que contiene los caracteres (, /?: @ & = + $ #) y todavía no hay alegría. ¿Alguna idea? – tmutton

+0

El problema ahora no son los caracteres especiales sino la nueva línea o las devoluciones. Si pongo una línea de retorno en el texto, no se publica en el servicio web. ¿Existe un arreglo rápido para esto? – tmutton

+0

Así que arregló los caracteres especiales, bien. Sin ver el código, no puedo estar seguro de por qué no se publica en su servicio web. Pruebe esto, active el Panel de red (con Firebug, en la pestaña ** Net **) y realice la solicitud de ajax, consulte qué es el código de error que devuelve el servidor. – suhendri

10

pasar a través de los datos como un objeto en lugar de una cadena:

$.ajax 
({ 
... 
data: {stars: stars, rating: rating...(etc)} 
}); 
+0

Esto funcionó para mí. Si utilicé una cadena de consulta para datos y había un + en ella, se convertiría en un espacio cuando mi servlet la recuperó, aunque no había cambiado el contentType, así que debería haberlo codificado. Cuando cambio a este método anterior, mi servlet ve el + correctamente en los datos. – mikato