Ответ 1
Мой ответ в разделах
- Ошибка
- Но это даже не имеет значения.
- Реальная проблема
- Как кто-то мог найти причину/настоящую проблему
- Решение, включающее обработку ошибок
Ошибка
Ошибка заключается в том, что она пытается проанализировать ContentRight.html
как XML файл. Файлы XML строги, поэтому любая маленькая вещь, такая как отсутствующая </img>
, вызовет полный сбой. В этом случае существует более одного элемента верхнего уровня. (в обычном HTML существует только один элемент верхнего уровня <html>
). Второй элемент верхнего уровня считается "нежелательным после элемента документа". Я предполагаю, что изображение является вторым элементом, вызывающим проблему.
Но это даже не имеет значения
Но все это не относится к делу. Нет причин для того, чтобы вы разбирали XML на первой странице. Вы просто хотите HTML. Правильно? Я предполагаю, что он пытается проанализировать XML и сохранить его в responseXML
. Из-за ошибки responseXML
имеет значение null. Но вы используете 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
или еще что-то.