$ .ajax () обрабатывает мою строку в кодировке URL - PullRequest
2 голосов
/ 18 декабря 2010

У меня есть строка в кодировке URL, которую я отправляю в php через jQuery AJAX API, который автоматически декодируется и передается на сервер.

Ajax Call:

var requestXML = '<searchString>red%20ford%5BimpoundState%3Ain%5D</searchString>';
$.ajax({
 data: "query=" + requestXML,
 success: function(response)
 {
     //alerts <searchString>red%20ford%5BimpoundState%3Ain%5D</searchString>
     alert(requestXML);
 }
});

Проверка запроса в инструментах Chrome Dev показывает, что он декодируется alt text

Я немного растерялся здесь, я прочитал немного о данных обработки jQuery, но я отключил это через {processData: false}, но я не получил никаких результатов.

-Спасибо за любую помощь!

ОБНОВЛЕНИЕ:

Мой бэкэнд в настоящее время настроен на анализxml со значениями в кодировке URL.

Как: <searchString>red%20ford%5BimpoundState%3Ain%5D</searchString>

Когда я передаю data: {query: requestXML} я получаю ...

Это: %3CsearchString%3Ered%20ford%5BimpoundState%3Ain%5D%3C%2searchString%3E (кодированный в URL xml).

Реальная проблема в том, что когда я генерирую этот XML, я кодирую значения, но jQuery, похоже, декодирует их в запросе.

1 Ответ

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

Вы можете использовать data: {query: requestXML}, для передачи параметров, и они получают URL, закодированный с помощью jQuery.

Дело в том, что параметр привязывается к URL как есть, если он уже является строкой.

Цитата

data ( Object, String )

Данные для отправки на сервер.Он преобразуется в строку запроса, , если это еще не строка .Он добавляется в URL для GET-запросов.См. Параметр processData, чтобы предотвратить эту автоматическую обработку.Объект должен быть парой ключ / значение.Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом на основе значения традиционного параметра (описанного ниже).

Поскольку вы используете метод GET, ваши параметры добавляются в URLстрока.Затем декодирование происходит из браузера, а не из jQuery.

...