Мой ответ в разделах
- Ошибка
- Но это даже не имеет значения
- Реальная проблема
- Как кто-то мог иметьобнаружил причину / реальную проблему
- Решение, которое включает обработку ошибок
Ошибка
Ошибка состоит в том, что он пытается проанализировать ContentRight.html
как XMLфайл.XML-файлы строги, поэтому любая мелочь, например, отсутствие </img>
, может привести к полному отказу.В этом случае существует более одного элемента верхнего уровня.(в обычном HTML есть только один элемент верхнего уровня <html>
).Второй элемент верхнего уровня считается «Хлам после элемента документа».Я предполагаю, что изображение является вторым элементом, который вызывает проблему.
Но это даже не имеет значения
Но это все не имеет значения.У вас нет причин анализировать XML на первой странице.Вы просто хотите HTML.Правильно?Я предполагаю, что он пытается проанализировать XML и сохранить его в responseXML
.Из-за ошибки responseXML
является нулевым.Но вы используете responseText
, поэтому проблем быть не должно.(игнорируйте ошибку)
Реальная проблема
Все это и теперь я вижу проблему.Вам требуется HTTP-статус 200 с req.status == 200
.Поскольку вы не используете http://
, а вместо этого file://
, нет кода состояния и возможности серверной ошибки 500
и малой вероятности обнаружения не найденного 404
.Так что все, что вы получите, это 0
.Хорошей практикой, когда вы получаете что-то вроде этого, является добавление линий оповещения
Как кто-то мог найти причину / реальную проблему
req.onreadystatechange = function() {
alert(req.readyState)
if (req.readyState == 4 && req.status == 200) {
document.getElementById(divId).innerHTML = req.responseText;
}
}
будет предупреждать 1
2
3
4
так что вы знаете, readyState
равно 4. Затем попробуйте
req.onreadystatechange = function() {
if(req.readyState == 4)
alert(req.status)
if (req.readyState == 4 && req.status == 200) {
document.getElementById(divId).innerHTML = req.responseText;
}
}
Вы получите 0
, и вы окажетесь ближе к проблеме.
Решение, которое включает обработку ошибок
Хорошее решение -
req.onreadystatechange = function() {
if (req.readyState == 4 && (req.status == 200 || req.status == 0 && req.responseText)) {
document.getElementById(divId).innerHTML = req.responseText;
} else {
document.getElementById(divId).innerHTML = '<b>Error. HTTP ' + req.status + '</b>'
}
}
Поскольку, если статус равен 0, то может означать сбой подключения к Интернету, в этом случае responseText
будет пустым, и тогда вы будетеполучить Error. HTTP 0
.Если бы он не был пустым, это означало бы, что это было file://
, и это работало бы как очарование.
И, конечно, ошибка на уровне сервера выдала бы Error. HTTP 500
или еще много чего.