JQuery AJAX двойная проблема кодирования - PullRequest
0 голосов
/ 25 октября 2011

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

my_url = some_url + textinput
my_url = encodeURI(my_url)

Проблема, которую я вижу, состоит в том, что после функции encodeURI еврейская часть выглядит так: %D7%9E%D7%9C%D7%95%D7%9F (что нормально).Затем я использую вызов jquery:

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

и вижу, что на сервере это выглядит так, как будто оно было закодировано снова, так что каждый знак «%» теперь является% 25 (представление знака процента в utf-8) и моя часть на иврите выглядит так: %25D7%259E%25D7%259C%25D7%2595%25D7%259F (каждый "%" =>% 25)

Я не смог найти способ преодолеть это, я надеюсь, что вы можете :-) Cheeers, Roy

1 Ответ

0 голосов
/ 25 октября 2011

Я думаю, что лучшим вариантом здесь является использование атрибута 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):

GET http://fiddle.jshell.net/search_results/?search=%D7%91%D7%92%22%D7%A5+%D7%9C%D7%9E%D7%AA%D7%9E%D7%97%D7%99%D7%9D%3A+%D7%97%D7%96%D7%A8%D7%95+%D7%9C%D7%94%D7%99%D7%93%D7%91%D7%A8%D7%95%D7%AA+%D7%A2%D7%9D+%D7%94%D7%90%D7%95%D7%A6%D7%A8 404 (НЕ НАЙДЕНО)

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

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