JQuery AJAX не отправляет UTF-8 на мой сервер, только в IE - PullRequest
24 голосов
/ 19 марта 2010

Я отправляю UTF-8, японский текст, на мой сервер. Это работает в Firefox. Мои access.log и заголовки:

/ajax/?q=%E6%BC%A2%E5%AD%97
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type    application/x-www-form-urlencoded; charset=UTF-8

Но в IE8 мой access.log говорит:

/ajax/?q=??

По какой-то причине IE8 превращает мой вызов AJAX в вопросительные знаки. Зачем!? Я добавил scriptCharset и ContentType в соответствии с некоторыми уроками, но все равно не повезло.

А это мой код:

$.ajax({
    method:"get",
    url:"/ajax/",
    scriptCharset: "utf-8" ,
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data:"q="+query ...,
    ...
    })

Ответы [ 4 ]

55 голосов
/ 19 марта 2010

Попробуйте кодировать параметр запроса с помощью encodeURIComponent()

data:"q="+encodeURIComponent( query )

Как правильно заметил bobince в своем комментарии, если вы используете нотацию объекта для передачи параметров в метод ajax, он будет обрабатывать саму кодировку.

так

data:{ q : query }

заставит jQuery обрабатывать кодировку ..

2 голосов
/ 17 декабря 2012

Я читал этот пост, надеясь, что это решит проблему, с которой я столкнулся, и это было связано с преобразованиями utf8.

В моем случае оказалось, что подсистема сервера (node.js), вычисляющая длину содержимого данных с данными, которые считаются необработанными, а не utf8, поэтому два символа с расширенными символами в uft8 вычислялись так, как если бы один символ, в результате чего сервер отправляет слишком мало одного символа.

Посмотрите, что я сделал, чтобы решить эту проблему здесь: Не правильно сформирован Json при отправке в CouchDB

1 голос
/ 18 августа 2011

Я знаю, что это старый пост, но у меня недавно была эта проблема, и я хотел бы внести свой вклад на тот случай, если у кого-то еще будет такая же проблема. Я использую PHP, но я уверен, что есть опция на каждом серверном языке. Это была просто пара вещей:

  1. Убедитесь, что вы отправляете правильные заголовки в своем ответе ajax, добавив заголовок ('Content-Type: text / html; charset = utf-8'); Это должно быть вашей первой строкой. Если у вас есть какие-либо ошибки, говорящие о том, что заголовки уже отправлены или что-то в этом роде, это потому, что где-то в вашем коде вы выводите дополнительный пробел или что-то еще до отправки заголовка, так что проверьте свой код.

  2. Когда вы строите свой ответ на своем сервере, убедитесь, что вы преобразовали все свои символы в соответствующий HTML-символ, используя echo htmlentities ($ your-string, null, 'utf-8); Потому что даже после сообщения IE о том, что вы отправляете данные utf-8, похоже, что IE забывает об этом или просто ничего не предполагает, поэтому добавление этого в ваш код обеспечит правильный вывод.

Спасибо всем за помощь.

0 голосов
/ 24 марта 2015

Используйте encodeURIComponent() в javaScript. Вот образец:

function doPost()
{
    var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
    xmlHttp.open("GET", URL);
    xmlHttp.send();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...