Проблема с двойным кодированием jQuery ajax

#jquery #ajax #urlencode

#jquery ( jquery ) #ajax #urlencode urlencode #jquery #urlencode

Вопрос:

Я пытаюсь отправить ajax-вызов на сервер, который считывает вводимый текст от пользователя (это иврит в кодировке utf-8). Я использую что-то вроде этого:

 my_url = some_url   textinput
my_url = encodeURI(my_url)
  

Проблема, которую я вижу, заключается в том, что после encodeURI функции часть на иврите выглядит так: מלון (и это нормально). Затем я использую вызов jquery:

 $.ajax({
    url: search_url,
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    error:errorData,
    success:getSearchResults
});
  

и я вижу, что на сервере это выглядит так, как будто оно было закодировано снова, так что каждый знак «%» теперь равен % (представление знака процента в формате utf-8), и моя часть на иврите выглядит так:

%D7%9E%D7%9C%D7%95%D7%9F (каждый «%» => % 25)

Я не смог найти никакого способа преодолеть это, надеюсь, вы сможете 🙂

Приветствую, Рой

Комментарии:

1. Если я правильно понимаю, вы кодируете параметры GET в фактическом URL. Есть ли причина не просто использовать data атрибут в ваших .ajax() параметрах?

2. Кроме того, есть ли причина, по которой вы должны кодировать его в первый раз? Похоже .ajax() , это может сделать это за вас.

3. @nrabinowitz Что касается использования атрибута data, ну, я этого еще не пробовал и, вероятно, буду (у вас есть пример или оболочка, которую я копаю …?). Что касается вашего второго замечания, ну, я тоже попробовал это, но, похоже, просто объединение части на иврите с URL-адресом было неправильно закодировано.

Ответ №1:

Я думаю, что лучшим вариантом здесь является использование data атрибута в .ajax() параметрах. Я смоделировал версию здесь: http://jsfiddle.net/nrabinowitz/nmZra/1 /

 $.ajax({
    url: '/search_results/',
    data: { search: text },
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    success: $.noop
});
  

Не существует отличного способа заставить jQuery отображать фактический запрашиваемый URL-адрес, но если вы посмотрите в консоли, такой как Firebug, вы увидите сообщение об ошибке (потому что это поддельный URL):

ПОЛУЧИТЬ http://fiddle.jshell.net/search_results/?search=בג»ץ למתמחים: חזרו להידברות עם האוצר 404 (НЕ НАЙДЕН)

Похоже, что он правильно кодирует текст на иврите, без проблемы с двойным кодированием, с которой вы столкнулись.