2

Вопрос по ajax, xml, javascript – Мой XML-файл не поддерживается Google Chrome и Internet Explorer

Я делаю простое приложение JavaScript, где мне нужно загрузить XML-файлы и показать их перед пользователем. но мой код работает только в Mozilla Firefox, но когда дело доходит до Chrome и Internet Explorer, они не работают. Я загружаю свой XML-документ на локальном компьютере.

$(document).ready(function() {
    $('.buttons').slideToggle('medium');

    $.ajax({ 
    url: "dictionary.xml", 
    success: function( xml ) { 
        $(xml).find("word").each(function(){ 
            $("ul").append("<li>" + $(this).text() + "</li>");
        }); 
   } 
    });
}

А вот и мой XML

 <?xml version="1.0" encoding="UTF-8"?> 
  <xml> 

    <word> 
      <threeletter>RIP</threeletter> 
      <fourletter>PIER</fourletter>
      <fiveletter>SPIRE</fiveletter> 
      <sixletter>SPIDER</sixletter> 
     </word>

     <word> 
      <threeletter>SUE</threeletter> 
      <fourletter>EMUS</fourletter>
      <fiveletter>SERUM</fiveletter> 
      <sixletter>RESUME</sixletter> 
     </word>

     <word> 
      <threeletter>COO</threeletter> 
      <fourletter>CON</fourletter>
      <fiveletter>CONDO</fiveletter> 
      <sixletter>CONDOM</sixletter> 
     </word>

    </xml>

Я нашел ошибку, вот она

XMLHttpRequest cannot load file:///C:/Users/John/Desktop/JsTwist/dictionary.xml. Origin null is not allowed by Access-Control-Allow-Origin.
  • Error: User Rate Limit Exceeded

    от user962206
  • Error: User Rate Limit Exceededchrome.exe --allow-file-access

    от
  • Error: User Rate Limit Exceeded"C:\fakepath\chrome.exe" --allow-file-access

    от
  • Error: User Rate Limit Exceeded

    от user962206
  • Error: User Rate Limit Exceeded

    от user962206
  • Я думаю, что ошибка в том, что Google Chrome не разрешает доступ к локальным файлам? но я обнаружил, что XMLHttpRequest не может загрузить файл: /// C: /Users/John/Desktop/JsTwist/dictionary.xml. Нулевой источник не разрешен Access-Control-Allow-Origin.

    от user962206
  • Можете ли вы проверить на ошибку или что-то в консоли разработчика Chrome? [Ctrl + Shift + J],

    от Rohan Prabhu
  • Ваш XML действителен, он был просто неправильно отформатирован и выглядело так, как будто вы пропустили первые две строки. Если вы выделите свой код в текстовом поле и нажмете CTRL + K, он отформатирует его как код.

    от Jim Schubert
  • но он работает в Mozilla Firefox.

    от user962206
  • 3

    Google Chrome не разрешает запросы AJAX по

    file:// протокол по умолчанию.

    Вам нужно будет запустить Chrome с--allow-file-access переключатель.

    Вот инструкции для питания коммутаторов на каждой ОС.

    Я не уверен, как включить протокол файла для IE.

    Возможно, самое простое - это настроить локальный веб-сервер и запустить ваше приложение вместе с файлами XML в нем, тогда вам не придется беспокоиться об этой проблеме в любом браузере.

    edit

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

    При запросе XML-документа с помощью jQuery, вы должныalways укажите dataType в объекте настроек. Внутренне, jQuery делает все возможное, чтобы угадать, что возвращается, и я сделал так, чтобы он считал совершенно хороший XML-документ HTML / XHTML.

    Для этого добавьтеdataType: "xml", Например:

    $(document).ready(function() {
        $('.buttons').slideToggle('medium');
    
        $.ajax({ 
            url: "dictionary.xml", 
            success: function( xml ) { 
                $(xml).find("word").each(function(){ 
                    $("ul").append("<li>" + $(this).text() + "</li>");
                }); 
            },
            dataType: "xml"
        });
    }
    

    Поддерживаемые типы данных доступны на странице документации дляjQuery.ajax ().

    Кроме того, я столкнулся сAccess-Control-Allow-Origin ошибка выше при попытке получить RSS-канал с удаленного сервера. Единственный способ, которым я решил обойти это, состоит в том, чтобы прокси-сервер запрашивал RSS-канал из кода на стороне сервера и доставлял его через некоторый прокси-скрипт. Вот простой пример в PHP:

    <?php
    
     if(isset($_GET['q']) && isAjax())
     {
        $q = strip_tags($_GET['q']);
        header("Status: 200");
        header("Content-type: text/xml");
        echo  file_get_contents('http://'.$q);   
        exit();
     }
    
    function isAjax() {
        return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
        ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
    }
    
    ?>
    

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