Я подозреваю, что в вашем 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"
в dojoConfig Я указав пакет, как: пакетов: [ {имя: " Шаблоны ", location: location.pathname.replace (/ \/[^ /] + $ /," ") +"/Templates "} ] Спасибо – pvitt
@pvitt Я обновил ответ (возможно, слишком много деталей, но эй : P), посмотрите, помогает ли это. – Frode
Спасибо. Это сделало трюк - я буду использовать местоположение: «/ Шаблоны» на сервере – pvitt