Я столкнулся со странной проблемой.
Я общаюсь со своим сервером с помощью AJAX. (Я запускаю свое веб-приложение на localhost
). Сервер расположен, скажем, на http://www.example.com
Чтобы обойти ту же политику происхождения, я использую JSONP. Я динамически создаю тег <script>
и загружаю данные с моего сервера.
Все идет нормально.
Затем я решил загрузить свое веб-приложение на этот поддомен: http://m.example.com
Вот когда я сталкиваюсь с сумасшедшими ошибками. Иногда страница загружается, иногда нет. Когда он не загружается, Firebug выдает ошибку DOCTYPE
.
Я провел некоторое исследование и наткнулся на этот пост о стеке: firebug возвращает синтаксическую ошибку в типе документа? а>
Цитирование ответа по этой ссылке:
Обычно это происходит из-за того, что вы загружаете HTML-документ как скрипт. Это часто вызвано
<script src=""></script>
(то есть относительным URI, указывающим на текущий, HTML, документ)) или одним из скриптов, указывающим на ошибку 404.
Довольно полезная штука. Исходя из всего вышесказанного, я пришел к выводу, что всякий раз, когда мой сервер медленно отвечает, атрибут src
тега <script>
равен нулю. Поскольку это выдает 404 error
, я получаю ошибку DOCTYPE
в Firebug. Всякий раз, когда мой сервер отвечает быстро, проблем нет, и все работает нормально.
Как решить эту проблему? Я мог бы установить ручной тайм-аут или что-то в этом роде, но это не было бы надежным и элегантным решением.
Любая помощь, ребята?
РЕДАКТИРОВАТЬ:
Вот код:
Эта функция используется для динамического создания тега script
:
function appendScriptToHead() {
var element = document.createElement("script");
element.src = 'http://www.example.com/?data&callback=callfunction';
document.getElementsByTagName("head")[0].appendChild(element)
}
Эта функция обратного вызова вызывается, когда указанный выше URL-адрес, содержащий данные JSONP, загружается:
function callfunction(response) {
alert(response);
}
src
являетсяnull
, добавьте проверку дляnull
перед вставкой тега сценария. Если вы хотите иметь возможность поймать ошибку, тайм-ауты — это то, что вам нужно. - person Matt   schedule 12.07.2012src
нулевым? - person wiseindy   schedule 12.07.2012http://
. Та же проблема всплывает - person wiseindy   schedule 12.07.2012<body onLoad=appendScriptToHead()>
- person wiseindy   schedule 14.07.2012