2010-11-08 6 views
0

Я создаю локальный файл html для динамического отображения некоторых данных из файла XML и с помощью инспектора Chrome. Я решил, что мой XML-файл не анализируется, потому что он «не размещен на веб-сервере».Ajax Parsing Local XML

XMLHttpRequest cannot load data.xml. Cross origin requests are only supported for HTTP. 

Я знаю, что есть несколько флагов, которые я могу передать в Chrome/веб-браузер, чтобы обойти это ограничение, но я изучаю альтернативный метод. Мне, вероятно, придется распространять эти файлы нескольким людям и научить их, как передавать флаги в браузер, для меня не вариант. Хостинг их на веб-сервере тоже не вариант.

Большое спасибо.

ответ

1

Нет призрака, если вы не настроили локальный сервер или не разместили XML-файл локально. Ajax должен следовать за same origin policy.

0

Как насчет настройки локального веб-сервера? XAMPP должен быть прост в установке даже для новичков. Просто скажите, чтобы они поместили ваши файлы в папку htdocs, запустили xampp и запустили сервер Apache.

+0

Я четко заявляю, что я не хочу запускать веб-сервер для этого. – nmuntz

+0

@nmuntz, я бы предложил XAMPP тоже, я не чувствую, что ваши инструкции * четко * не сообщают местному веб-серверу. – zzzzBov

+0

Я думаю, что нет более простого способа сделать это. Установка xampp проще для большинства людей, чем изменение некоторых неясных флагов браузера. – arifwn

1

Если вы хотите использовать библиотеку, вы можете использовать jQuery's AJAX method для выполнения кросс-доменного запроса (я не совсем уверен, что jQuery будет поддерживать то, что вы пытаетесь сделать). JSONP работает, но у вас есть данные XML ...

В любом случае вы можете попробовать загрузить его в теге script и посмотреть, можете ли вы получить значение innerHTML без нарушения сценария; как только вы закончите получать текст из него, удалите скрипт со страницы. Возможно, вы сможете получить данные до того, как браузер попытается разобрать сценарий, добавив onload и onreadystatechange событиям в элемент сценария.

var s = document.createElement('script'); 
s.src = '/path/to/file.xml'; 
s.onload = s.onreadystatechange = getData; 
function getData(e) 
{ 
    //get the text out of the script element 
    //remove the event handler from the script element 
    //remove the script from the page 
} 
document.getElementsByTagName('body')[0].appendChild(s); 

Я не тестировал его, но он может работать.

0

Если есть веская причина иметь отдельный файл html и xml, вы можете просто поместить данные непосредственно в html-файл.

0

Я боюсь, если хром предоставляет только варианты, которые вы не любите применять, ваше приложение и хром не объединятся. Доступ через iframe & объект тоже не работает, load() - метод createDocument не поддерживается хром (если он, я думаю, вы получили ту же ошибку).
Независимо от того, что вы попробуете, будет боком, чтобы пройти ограничения на хром, что не может быть хорошо, потому что я думаю, что у них есть веские причины для установки этих ограничений.