Ошибка запроса: не удается загрузить файл в AJAX / DOJO

#jquery #ajax #dojo

#jquery #ajax #dojo

Вопрос:

Я разместил текстовый файл с именем hi.txt в папке webapps моего сервера tomcat. Я могу получить доступ к URL-адресу в браузере, но, как ни странно, мои вызовы AJAX в приведенном ниже коде для отображения содержимого файла не работают для той же ссылки (//hostname:8080/dojo/hi.txt ) .

Я получаю сообщение об ошибке как ошибка запроса: не удается загрузить статус URL: 0. Кто-нибудь может предложить, как можно исправить эту проблему? Я использую функцию AJAX в DOJO.

P.S: Чтобы увидеть ошибку в приведенном ниже коде, скопируйте ее в file_name.txt файл, а затем сохранить как file_name.html и открыть в IE или Firefox.

 <!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Demo: dojo/request/xhr</title>
        <link rel="stylesheet" href="http://dojotoolkit.org/documentation/tutorials/resources/style/style.css" media="screen">
        <link rel="stylesheet" href="http://dojotoolkit.org/documentation/tutorials/1.6/resources/style/demo.css" media="screen">
    </head>
    <body>
        <h1>Demo: dojo/request/xhr</h1>
        <p>Click the button below to see dojo/request/xhr in action.</p>
        <div>
            <button id="textButton">Request Text File</button>
        </div>
        <br /><br />
        <div id="resultDiv">
        </div>
        <!-- load dojo and provide config via data attribute -->
        <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.5/dojo/dojo.js"></script>
        <script>
            require(["dojo/dom", "dojo/on", "dojo/request", "dojo/domReady!"],
                function(dom, on, request){
                    // Results will be displayed in resultDiv
                    var resultDiv = dom.byId("resultDiv");

                    // Attach the onclick event handler to the textButton
                    on(dom.byId('textButton'), "click", function(evt){
                        // Request the text file
                        request.get("http://localhost:8080/dojo/hi.txt").then(
                            function(response){
                                // Display the text file content
                                resultDiv.innerHTML = "<pre>"   response   "</pre>";
                            },
                            function(error){
                                // Display the error returned
                                resultDiv.innerHTML = "<div class="error">"   error   "<div>";
                            }
                        );
                    });
                }
            );
        </script>
    </body>
</html>
  

Комментарии:

1. Вы используете разные домены ajax.googleapis.com, dojotoolkit.org and localhost:8080 . Вызовы AJAX с разных доменов не разрешены. Попробуйте загрузить исходный код dojo на свой локальный сервер tomcat и просто используйте ‘request.get(«dojo/hi.txt «)’ в вашем коде, который должен работать. Если вы хотите, чтобы междоменная работа работала, вам нужно использовать JSONP AJAX-запрос в вашем коде.

2. @frank Можете ли вы уточнить эту часть, мне неясен предложенный вами подход «Попробуйте загрузить исходный код dojo на свой локальный сервер tomcat и просто используйте ‘request.get(«dojo/hi.txt «)’ в вашем коде». Я немного новичок в настройке dojo в tomcat, поэтому, если вы можете немного подробно объяснить мне шаги, это будет приятно.

Ответ №1:

Вам необходимо загрузить исходный код dojo отсюда. И поместите файлы на том же уровне, что и файл h1.txt на локальном сервере tomcat. а затем измените следующую строку в своем коде.
От

 <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.5/dojo/dojo.js"></script>
  

Для.

 <script src="dojo/1.8.5/dojo/dojo.js"></script>
  

Ваша структура каталогов на сервере должна выглядеть следующим образом.

 /index.html
/dojo/h1.txt
/dojo/1.8.5/dojo/<source files and subdirectories>
/dojo/1.8.5/dojox/<source files and subdirectories>
/dojo/1.8.5/dijit/<source files and subdirectories>