Проблемы с кодировкой URL $ .ajax в jQuery - PullRequest
17 голосов
/ 20 декабря 2010

Я использую метод jQuery $ .ajax для отправки и получения данных в службу REST.Некоторые URL-адреса, которые я предоставляю методу $ .ajax, требуют кодирования пробелов и других специальных символов.

Проблема заключается в браузерах Chrome, Safari (Webkit) и Internet Explorer.Firefox POST ссылается на URL-адрес, который закодирован, но другие браузеры POST ссылаются на URL-адрес, который не закодирован.

Например:

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

Firefox размещает URL-адрес в следующем формате:

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

Chrome, Safari и IE ОТПРАВЛЯЕТ URL в следующем формате:

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

Службы REST принимают кодированный (Firefox) формат - есть ли способ, которым я могу сделать этоодинаково для всех браузеров?

Заранее спасибо!

Ответы [ 4 ]

24 голосов
/ 20 декабря 2010

Вы можете использовать функцию javascript encodeURI() для кодирования URL в «формат Firefox», как вы заявляете.

8 голосов
/ 20 декабря 2010

Передача [Product Type B] в незашифрованном виде недопустима, поэтому то, что делают из него браузеры, не определено.

Сделайте encodeURIComponent() на типовой детали изделия.

3 голосов
/ 20 декабря 2010

Я думаю, .serialize () будет jquery способ сделать это.

проверьте здесь: http://api.jquery.com/serialize/

также есть плагин для jquery: http://plugins.jquery.com/project/URLEncode

или способ javascript ... encodeURIComponent ()

проверьте здесь: http://www.w3schools.com/jsref/jsref_encodeURI.asp

2 голосов
/ 20 декабря 2010

Быстрое исправление будет состоять в encodeURI() URL-адресе перед передачей в $ .ajax.Вы также можете заменить функцию $ .ajax тонкой оболочкой, чтобы взять литерал {} и закодировать URL-адрес перед передачей функции original .

...