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

2

Я делаю простое приложение 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.
Ваш XML действителен, он был просто неправильно отформатирован и выглядело так, как будто вы пропустили первые две строки. Если вы выделите свой код в текстовом поле и нажмете CTRL + K, он отформатирует его как код. Jim Schubert
но он работает в Mozilla Firefox. user962206
Можете ли вы проверить на ошибку или что-то в консоли разработчика Chrome? [Ctrl + Shift + J], Rohan Prabhu
Я думаю, что ошибка в том, что Google Chrome не разрешает доступ к локальным файлам? но я обнаружил, что XMLHttpRequest не может загрузить файл: /// C: /Users/John/Desktop/JsTwist/dictionary.xml. Нулевой источник не разрешен Access-Control-Allow-Origin. user962206

Ваш Ответ

1   ответ
3

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, я с удовольствием их применю.

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

Похожие вопросы