utf8 example contenttype jquery ajax firefox webkit url-encoding

example - jquery ajax json



Problemas de codificación de la URL $.ajax de jQuery (4)

Creo que .serialize () sería la forma jquery de hacer esto.

Consulte aquí: http://api.jquery.com/serialize/

también hay un complemento para jquery: http://plugins.jquery.com/project/URLEncode

o la forma javascript ... encodeURIComponent ()

Consulte aquí: http://www.w3schools.com/jsref/jsref_encodeURI.asp

Estoy usando el método $ .ajax de jQuery para enviar y recuperar datos a un servicio REST. Algunas de las URL que estoy proporcionando al método $ .ajax requieren espacios y otros caracteres especiales para ser codificados.

El problema radica en los navegadores Chrome, Safari (Webkit) e Internet Explorer. Firefox POST a una URL que está codificada, pero los otros navegadores POST a una URL que no está codificada.

Como ejemplo:

$.ajax ({ url: "http://localhost:8080/rest/123/Product Line A/[Product Type B]", type: "POST", dataType: "json", data: { ... }, success: function(...){}, error: function(...){} })

Firefox publica la URL en el siguiente formato:

http://localhost:8080/rest/123/Product%20Line%20A/%5BProduct%20Type%20B%5D

Chrome, Safari e IE publican la URL en el siguiente formato:

http://localhost:8080/rest/123/Product Line A/[Product Type B]

Los servicios REST aceptan el formato codificado (Firefox). ¿Hay alguna manera de que esto sea coherente en todos los navegadores?

¡Gracias por adelantado!


La solución rápida sería encodeURI() la URL encodeURI() antes de pasar a $ .ajax. También puede reemplazar la función $ .ajax con una envoltura delgada para tomar el literal {} y codificar la URL antes de pasar a la función original .


Pasar [Product Type B] en forma no codificada no es válido, por lo que lo que hacen los navegadores no está definido.

Haga un encodeURIComponent() en la parte del tipo de producto.


Puede utilizar la función encodeURI() javascript para codificar una URL en el "formato de Firefox" según encodeURI() .