jquery $ .ajax () в сафари и хром не работает - PullRequest
0 голосов
/ 20 ноября 2010

Я хочу использовать $ .ajax для чтения некоторой информации из xml-файла, вот мой js-код:

        $.ajax({
            type: "get",
            url: "Database/App_all.xml",
            dataType: "xml",
            timeout: 2000,
            beforeSend: function () {

            },
            success: function (xml) {
                $(xml).find("app[id='id-1']").appendTo($("#contain"));
            },
            error: function () {
                alert("ajax failed!");
            }
        });

Однако код отлично работает только в Firefox и Opera.

Он не работает в chrome (7.0.517.24) и safari (5.0.1), не работает без какого-либо предупреждения, даже без предупреждения («ajax fail»).

Есть ли какая-либо ошибка в $ .ajaxв chrome и safari? так как решить проблему?

большое спасибо :)

Ответы [ 5 ]

4 голосов
/ 20 ноября 2010

Вы должны использовать встроенные в Chrome или Safari инструменты разработчика (ctrl + shift + i) для отслеживания ошибок JS и отслеживания фактических запросов AJAX.

Обернут ли ваш код в document.ready?Есть ли какие-либо ошибки в консоли javascript?Также попробуйте вывести что-нибудь после успешной строки обратного вызова.

Другой причиной этого может быть неправильный mime-тип для вашего XML-файла, возвращаемого сервером.Это должно быть [Content-type: text / xml].Вы можете проверить это во встроенных инструментах разработчика chrome или safari - просто ищите вкладку заголовков, когда выбран ресурс XML.Если это действительно проблема, вам может понадобиться настроить конфигурацию веб-сервера (основной конфиг или .htaccess для apache), чтобы вернуть правильный тип mime.

1 голос
/ 21 ноября 2010

Первое спасибо gajendra.bang и Māris Kiseļovs дайте мне ваши советы, я знаю, что не так с моим кодом, после того, как я получаю плохую повторную попытку, я пытаюсь узнать, что $ .ajax точно получен из xml, поэтому я использую firebug, проверяя содержимое div # и обнаружил, что:

 <div id="contain">
        <auther>cocept</auther>
 </div>

да, я думаю, что <auther></auther> должна быть проблемой, я даже не знаю, что $ .ajax также получил бы тэг поэтому я переписываю это:

  success: function (xml) {
        $("#contain").html($(xml).find("app[id='id-1']").find("auther").text());
}

тогда div $ содержит:

 <div id="contain">
        cocept
 </div>

так что хром и сафари могут показываться снова!

0 голосов
/ 08 марта 2013

Это проблема для локальных файлов ... Вы должны попробовать загрузить их на веб-сервер и проверить оттуда

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

Полагаю, у вас проблемы с чтением локального файла за ajax.Ajax может использоваться для чтения файла с того же веб-сервера, но есть некоторые ограничения безопасности, если вы читаете его не по HTTP.

В Firefox и Opera вы можете читать локальные файлы (с URL-адресом, как файл: ///C:/Program%20Files/My/Database/App_all.xml) за ajax без каких-либо проблем.

В Internet Explorer вы должны использовать dataType: 'text', а затем преобразовать текст в XML (подробнее here ).

Чтобы читать локальные файлы в Chrome, необходимо перезапустить chrome с другими параметрами:

chrome.exe --allow-file-access-from-files

(Убедитесь, что все остальные экземпляры chorme закрытыперед запуском Chrome.exe в пути).

0 голосов
/ 20 ноября 2010
 $(xml).find("app[id='id-1']").appendTo($("#contain"));

что в основном возвращает xml, элемент с "#", например "#mydiv" или классом ".mydiv"

Я думаю, что вы пытаетесь получить доступ к элементу, и если вы не возвращаете его с "#", попробуйте

 $("#"+xml).find("app[id='id-1']").appendTo($("#contain"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...