2014-10-17 4 views
0

У меня есть веб-страница (default.htm), которая загружает некоторые пользовательские виджеты dojo. Виджеты загрузки прекрасно, когда весь URL набран:Пользовательские виджеты dojo не загружаются по умолчанию. Htm

Http: /www.eg/default.htm

но когда сайт попал в: HTTP: /www.eg виджеты DonT нагрузки.

, когда они загружаются должным образом (например, при default.htm) сообщение консоли: XHR завершения загрузки:

GET "http://www.eg/Templates/WatershedMap.htm" 

, когда они не нагрузить сообщение консоли:

OPTIONS http://templates/WatershedMap.htm net::ERR_NAME_NOT_RESOLVED 

I «Я запускаю iis 7. Кто-нибудь имеет представление о том, как я могу это исправить?

Благодаря

ответ

0

Я подозреваю, что в вашем dojoConf или данных-додзё-конф, вы используете location.pathname, это правильно? Или, возможно, непосредственно в вашем запросе xhr, где загружается WatershedMap.htm?

Когда вы просматриваете страницу только с http: // www.eg/, location.pathname - это просто косая черта «/». Если же, например, XHR пытается сделать это:

xhr(location.pathname + "/Templates/WatershedMap.html")... 

... то запрос будет на самом деле пойти //Templates/WatershedMap.html.

Эта двойная косая черта означает «protocol relative url». Браузер будет использовать ту же самую схему протокола (http/https), что и текущая страница, и добавить все, что приходит после двойной косой черты.

Другими словами, это на самом деле попытается сделать запрос перекрестного домена на http; // Шаблоны, которые запускают preflight OPTIONS request.

Однако, если ваша страница загружена с помощью http; // www.eg/foo/, то будет «/ something/something», и запрос будет отправлен на http; // www.eg/foo/ Шаблоны/WatershedMap.htm.

Вам нужно будет предоставить еще один код, если вам нужна помощь, чтобы выявить проблему. Просмотрите свой код для location.pathname и посмотрите, найдете ли вы что-нибудь, что может быть актуальным.

Edit: на основе ваших комментариев, ваш dojoConf имеет следующее:

packages: [{ 
    name: "Templates", 
    location: location.pathname.replace(/\/[^/]+$/, "") + "/Templates" 
}] 

Линия с заменой() в нем занимает путь текущей страницы (например, /foo/bar.htm), и удаляет последнюю косую черту и все после нее, затем добавляет «/ Шаблоны».

Предполагается, чтобы гарантировать, что каждый раз, когда вы загружаете что-то, что начинается с «Шаблоны» (например, если вы dojo/text!Templates/Map.htm, это будет выглядеть в той же директории на сервере в качестве текущей страницы.

Однако, когда вы находитесь на http: // www.eg/, путь - просто косая черта, и ничего не удаляется. Таким образом, вы получаете «// Шаблоны». Как упоминалось ранее, это становится относительным URL-адресом протокола, с шаблонами в качестве hostname. Определенно не то, что вы хотите!

С другой стороны, когда вы находитесь по адресу http; // www.eg/default.htm, путь является /default.htm, поэтому все это удаляется, и вы остаетесь с помощью только «/ Шаблоны». Это что вы хотите!

Вы могли бы решить, просто заменив линию:

location: location.pathname.replace(/\/[^/]*$/, "") + "/Templates" 

только одна разница символов (+ стал *)! Теперь он удалит одну косую черту, если вы просматриваете http; // www.eg/.

На мой взгляд, лучше использовать явный путь. Если вы знаете, что/шаблон всегда будет HTTP; // www.eg/Templates, вы можете также сделать:

location: "/Templates" 
+0

в dojoConfig Я указав пакет, как: пакетов: [ {имя: " Шаблоны ", location: location.pathname.replace (/ \/[^ /] + $ /," ") +"/Templates "} ] Спасибо – pvitt

+0

@pvitt Я обновил ответ (возможно, слишком много деталей, но эй : P), посмотрите, помогает ли это. – Frode

+0

Спасибо. Это сделало трюк - я буду использовать местоположение: «/ Шаблоны» на сервере – pvitt

Смежные вопросы