2012-06-01 1 views
2

принять $("#"+id).val() во вниманиеIE ajax отправка utf8 chars как?

var field = document.getElementById(id); 
/* ... */ 
if(field.value != "") 
    var jqxhr = $.get("/user/ajaxtag/tag/" + $("#"+id).val(), function(data) { 
     suggestionText = data; 
     //does something which i thing is non of problem's business 
     var arr = getListItems(field.value); 
     if (field.value.length > 0){ 
      createList(arr); 
     } else { 
      clearList(); 
     }; 
     // end of non of business 
    }); 

при использовании английский в поле ввода, который вызывает этот кусок кода на изменения, запрос Ajax это ответил успешно, но при использовании фарси как «س» IE посылает этот

GET /user/ajaxtag/tag/??_=1338567574102 HTTP/1.1\r\n 

(я получил эту информацию о Wireshark) и заменяет utf8 символы с?, проблема не возникает, когда я использую Firefox, только в IE (не удивительно га?) у меня есть эта строка в заголовке

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

в другом вопросе на stackoverflow.com было предложено изменить php.ini, но я на общем хосте и не имею доступа к файлу.

я сделал alert($("#" + id).val()), а предупредительной вещи не было? был входной char .. like س

ответ

3

Вам нужно закодировать имена и значения параметров с помощью функции encodeURIComponent().

или сделать его RFC3986 совместимый вы можете использовать эту функцию:

/** 
* encodeURIComponent() function is not 100% compatible with 
* RFC3986 http://www.faqs.org/rfcs/rfc3986.html 
*/ 
function encodeRFC3986(value) { 
    return encodeURIComponent(value) 
    .replace(/!/g, "%21") 
    .replace(/\*/g, "%2A") 
    .replace(/\(/g, "%28") 
    .replace(/\)/g, "%29") 
    .replace(/'/g, "%27"); 
} 
+1

да он должен быть заменен, как 'вар jqxhr = $ .get ("/ пользователь/ajaxtag/теги /" + encodeURIComponent ($ ("#" + id) .val()), функция (данные) {... 'спасибо ... – shampoo

+0

Почему это важно для совместимости с RFC3986? – shampoo

+0

Некоторые платформы требуют, чтобы строки были закодированы в формате RFC3986, encodeURIComponent () не совместимо на 100%, я разместил это для полноты ответа – ioseb

Смежные вопросы