Кодировка символов JQuery AJAX - PullRequest
       43

Кодировка символов JQuery AJAX

57 голосов
/ 16 февраля 2009

Я сейчас пишу французский сайт. Есть страница расписания, где боковая ссылка может быть использована для загрузки расписания на другой день.

Вот JS, который я использую для этого:

    <script type="text/javascript">
    function load(y) {
        $.get(y,function(d) {
            $("#replace").html(d);
            mod();
        });
    }
    function mod() {
        $("#dates a").click(function() {
            y = $(this).attr("href");
            load(y);
            return false;
        });
    }
    mod();
    </script>

Фактический AJAX работает как шарм. Моя проблема заключается в ответе на запрос.

Поскольку это французский сайт, есть много букв с акцентом. Я использую кодировку ISO-8859-15 именно по этой причине. Тем не менее, в ответ на мой AJAX-запрос, акценты становятся символом?, Потому что кодировка символов, похоже, возвращается в UTF-8.

Как мне избежать этого? Я уже пытался добавить PHP в начало запрошенных документов для установки набора символов:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

Но, похоже, это тоже не работает. Есть мысли?

Кроме того, хотя любой из вас ищет здесь ... почему самый правый столбец, кажется, становится меньше при загрузке новой страницы, вызывая искажение таблицы и каждый <li> в пределах <td> для переноса в следующая строка?

Приветствия

Ответы [ 22 ]

3 голосов
/ 16 мая 2011

У меня была похожая проблема с ASP на моих страницах. Я решил так:

1) Вставил в начале ASP-файла, вызванного методом jquery ajax, инструкцию:

Response.Charset = "windows-1252"

На моей странице asp до того, как кодировка не была определена, и я сохранил свой файл в кодировке ANSI (с текстовым редактором в виде блокнота ++)

2) В html-файле, который вызывает ASP-файл с помощью метода jquery ajax, я вставил тип содержимого параметра, который вы видите ниже:

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

Вкратце, важно определить в вашем ASP-файле, который называется charset. Странно, но я вижу, что мой jquery работает с windows-1252, но не работает с кодировкой ISO-8859-1: в этом случае метод jquery ajax дает исключение.

2 голосов
/ 11 сентября 2013

Я попробовал много предложений для чтения в текстовом файле с немецкими специальными символами (ä, ö, ü). В конце концов:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

позвольте мне читать специальными символами, но только ПОСЛЕ того как я сохранил FileName.txt в формате UTF-8 . Стандартный формат для сохранения текстовых файлов в редакторе Windows - ANSI , а не UTF-8, , но его можно изменить, если вы «Сохранить как» и использовать раскрывающийся список рядом с «Сохранить». -Кнопка или используйте лучший редактор для начала.

1 голос
/ 04 августа 2009

Я НЕ СОГЛАСЕН, все должно быть UTF-8, вы можете сделать так, чтобы он отлично работал с ISO 8859, я сделал, пожалуйста, прочитайте мой ответ здесь.

мой ответ в stackoverflow

1 голос
/ 08 июня 2011
<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

Это скрипт, из которого я получаю контент со страницы blabla.php.

Когда я получаю данные об успехе, мои акценты не отображаются.

Я нашел супер хорошее рабочее решение для выборки данных с акцентами на извлеченных данных из функции .success

На моей странице блабла. Я сделал это, чтобы найти решение моей проблемы:

Я использую utf8_encode(place your data here) в своем php-файле. Смотрите это в действии ниже:

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
0 голосов
/ 04 ноября 2016

У меня была похожая проблема. У меня есть текстовый файл с данными JSON, который имеет французский текст. Всегда была проблема с отображением некоторых символов. В моем случае программа JavaScript использует Ajax для получения текстового файла json следующим образом:

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

Возвращенные данные всегда имели неверные французские буквы с акцентом.

Текст JSON выглядит следующим образом:

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

Обратите внимание, что в приведенном выше примере данных, 3-й элемент, я поместил текст с правильными é и неправильными ê буквами с французским акцентом.

К вашему сведению, похоже, что существует некоторая глобальная конфигурация проекта Eclipse, использующая кодировку символов ISO-8859-1. В вашем случае это может быть другая кодировка.

После проверки вышеуказанных решений и игры с проектом, вот что решило мою проблему:

  • Найти источник текста с правильным отображением французского текста
  • Скопируйте текст
  • Перейти к Eclipse, открыть текстовый файл с данными
  • Щелкните правой кнопкой мыши файл в проводнике, откройте свойства и измените кодировку на ISO-8859-1
  • Исправьте текст так, чтобы он отображался правильно. Используйте копирование / вставку или клавиатуру
  • Возможно, вам придется использовать клавиши со стрелками на клавиатуре (влево / вправо), чтобы убедиться в отсутствии скрытых букв-преступников, которые будут отображаться в HTML со смешной формой. Удалить такое скрытое письмо
  • Сохранить файл

Теперь, в моем случае, я не указал никаких опций кодирования в вызове Ajax, и он работает нормально. Кроме того, если я изменю кодировку текстового файла с данными json, он все равно будет работать нормально.

Тарек

0 голосов
/ 05 ноября 2010

Только что изменил {"type":"GET"} на {"type":"POST"} и работал как шарм с ISO-8859-1

0 голосов
/ 29 августа 2013

Я попытался прочитать локальный файл json / text, используя $ .ajax, и кодировка сначала не сработала. Я получил его, сохранив файл json в кодировке UTF-8. Это можно сделать просто с помощью блокнота Windows. Используйте «сохранить как», а затем под именем файла вы можете установить кодировку UTF-8.

удачи!

0 голосов
/ 11 августа 2013

Если вы используете CodeIgniter, вы можете решить эту проблему, добавив следующий код в ваш контроллер перед загрузкой любых представлений (при условии, что в вашей конфигурации правильно установлен charset. Если нет, просто введите charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

То, как я это сделал, было добавить эту строку в конструктор MY_Controller, моего суперкласса для всех контроллеров, таким образом, я уверен, что у меня не возникнет проблем с кодированием.

Кстати, это не влияет на возвраты JSON (которые кодируются в UTF-8).

0 голосов
/ 07 июля 2012

Я пришел к этому вопросу с той же проблемой, что и спрашивающий. Ответы здесь очень информативны, и я опробовал почти каждый из предложенных ответов. Ни один из ответов здесь не работал для меня, хотя, возможно, была небольшая разница в моей проблеме. И это похоже на случай для многих. Я так старался, прежде чем закончить с ответом.

Итак, теперь я добавляю к уже длинному списку ответов свое собственное решение, которое решило мою проблему кодирования.

Я сделал только две вещи. В сценарий подключения к базе данных я добавил:

mysql_set_charset('utf8',$connection);

и кроме этого:

  • Я изменил кодировку всех файлов на UTF-8

Дело в том, что все должно быть в одинаковой кодировке. А при создании новых php-файлов для скриптов недостаточно просто изменить кодировку в скрипте - сам файл должен быть правильно закодирован.

0 голосов
/ 21 мая 2012

Я столкнулся с той же проблемой и пробовал несколько способов. И я нашел решение. Если вы установили заголовок запроса для «Принять», как показано ниже;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

вы увидите, что все символы кажутся правильными

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