Подтвердить что ты не робот

Проблемы с кодировкой jQuery $.ajax URL

Я использую метод 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 POSTS URL-адрес в следующем формате:

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

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

Сделайте encodeURIComponent() часть части продукта.

Ответ 4

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