Не удается загрузить пользовательский модуль Dojo - PullRequest
0 голосов
/ 17 сентября 2009

Я пытаюсь следовать учебному пособию по пользовательскому модулю на http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/modules-and-namespaces/creating-your-own-modul

У меня локальное развертывание dojo на http://localhost:8081/dojo-1.3.2/dojo/dojo.js Для моего пользовательского модуля я создал следующий файл JavaScript в http://localhost:8081/dojo-1.3.2/explosive/space/Modulator.js:

dojo.provide("explosive.space.Modulator");
dojo.declare("explosive.space.Modulator",null,{
bob:1
});

На моей html-странице есть следующее:

<script type="text/javascript" src="http://localhost:8081/dojo-1.3.2/dojo/dojo.js"></script>
<script type="text/javascript">
dojo.require("explosive.space.Modulator");
</script>

И когда я открываю свой сайт в Firefox, я получаю сообщение об ошибке:

Ошибка: не удалось загрузить 'Explosive.space.Modulator'; прошлой пытался »../explosive/space/Modulator.js'

Есть идеи, что я делаю не так?

РЕДАКТИРОВАТЬ: после дополнительного тестирования кажется, что код работает в режиме совместимости IE8 и IE8, но не в Firefox, Chrome или Opera.

EDIT2: мой HTML-файл находился в другом домене, но я не думал, что это должно иметь какое-то значение. Прочитав комментарий Сета (спасибо Сету!), Я попробовал его обоими способами.

У меня есть два экземпляра tomcat, один на порту 8080 и один на порту 8081. Я поместил index.htm в обоих экземплярах и запустил их оба.

http://localhost:8081/test/index.htm работает как в FF, так и в IE. http://localhost:8080/test/index.htm не работает должным образом в FF, но работает в IE.

Показать XmlHTTPRequests показывает, что FF выполняет вызов "GET http://localhost:8081/dojo-1.3.2/explosive/space/Modulator.js", который по какой-то причине возвращается с пустым ответом.

Вот весь мой код для index.htm, если это поможет.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7" />
    <title>Create Map</title>
    <script type="text/javascript" src="http://localhost:8081/dojo-1.3.2/dojo/dojo.js"></script>
    <script type="text/javascript">
      dojo.require("explosive.space.Modulator");

      function init(){
          var eludiumFuel36 = new explosive.space.Modulator();
          alert(eludiumFuel36.bob);
      }

      dojo.addOnLoad(init);
    </script>
  </head>
  <body class="tundra">
    <h1>Hello World!</h1>
  </body>
</html>

1 Ответ

2 голосов
/ 17 сентября 2009

Выглядит нормально из того, что у вас здесь. Когда вы открываете страницу, вы собираетесь http://localhost:8081/testpage.html (или что-то подобное)? Или вы собираетесь в другой домен?

У вас установлен firebug ? Если нет, установите его и включите «Показать XMLHttpRequests». Это покажет, к какому URL он пытается получить доступ в консоли (и любые другие возможные ошибки).

В противном случае на странице может быть что-то еще, кроме того, что вы опубликовали, путаясь с путем загрузки додзё.

Редактировать

Когда dojo делает dojo.require, он делает XHR-вызов для файла. Включает в себя хост и порт в нем. Таким образом, это нарушает междоменную безопасность, когда html-страница находится на localhost: 8081, а javascript на localhost: 8080. Вы можете обойти это, используя междоменную версию сборки файла (или убедитесь, что все запросы поступают на один и тот же порт и хост). По правде говоря, я не совсем уверен, почему IE работает с разными портами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...