Ошибка Firefox «элемент не найден»

Во-первых, это не совсем идеальный способ настройки страницы, однако необходимо распространять скрипт как 1 файл.

У меня есть php-скрипт в верхней части другого документа xhtml с javascript, и при определенных условиях используйте XHR для отправки строки запроса на самой странице. Затем php вверх активирует и сохраняет прошедшее содержимое как сеанс, а затем убивает себя (exit ()). XHR является асинхронным и никогда не проверяется, возвращает ли он содержимое.

Однако в Firefox 3 консоль ошибок генерирует ошибку, которая no element found возникает при каждом отправке запроса XHR. Кроме того, если я использую exit, например exit('Done') , Firefox выдает синтаксическую ошибку (Done), как если бы она вставляла ее в видимую DOM. Это не похоже на Opera.

Есть ли лучший способ сохранить сеанс с уже сгенерированной страницы xhtml? Очевидно, я мог бы XHR на другую страницу, но я бы предпочел сохранить все это на одном скрипте. Поддерживает ли Firefox запросы XHR на себя как обновления DOM? Я не знаю, почему он отправляет эту ошибку.


Обновление Как я уже сказал, firefox только сообщает об ошибке при выполнении запроса XHR. Страница действительна XHTML и работает отлично, без ошибок, если XHR-запрос не сделан на самой странице.

Мне было интересно, почему она отправляет ошибку, потому что она действительно ничего не возвращает.

Вот фрагмент javascript, который делает запрос ajax от объекта. Он создает объект XHR без функции обратного вызова и публикует информацию. Он работает правильно, если не ссылается на одну и ту же страницу.

  var saveState = { saveContent: function(updateActiveMenu) { var sendState = new ajaxObject(gV.url); if (!updateActiveMenu) { var storageContainer = document.getElementById("StorageContainer").innerHTML; var menu = document.getElementById("Nav").innerHTML; sendState.update("Containerstring="+urlencode(storageContainer)+"&Nav="+urlencode(menu)+"&Active="+gV.activeMenuItem, 'POST', true); } }, } 

И php делает это

 if (isset($_REQUEST['Containerstring']) && isset($_REQUEST['Nav']) && isset($_REQUEST['Active'])) { $_SESSION['Containerarray'] = (saveContainer(regulateEscapes(urldecode($_REQUEST['Containerstring'])))); $_SESSION['Navarray'] = (saveNav(regulateEscapes(urldecode($_REQUEST['Nav'])))); $_SESSION['Active'] = $_REQUEST['Active']; exit('Done'); } 

Я также знаю, что я не должен использовать innerHTML, но это еще одна история


Ошибка в этом

 Error: no element found Source File: http://localhost/ajax.php?1244648094055 Line: 1 

Обратите внимание, что ошибка, а на странице php, которую я использую, ссылается на строку запроса, которая никогда не вызывается.

Firefox ожидает получить что-то, что он может анализировать как XML назад, и бросать ошибку синтаксического анализа XML, когда он получает пустой ответ.

Прежде чем ваш PHP называет «exit ()», используйте

 header('Content-Type: text/plain'); 

и Firefox не будет пытаться анализировать ответ как XML, и не должно быть ошибок.

Вы должны заставить ваш php возвращать действительный HTTP-ответ, потому что Firefox попытается прочитать его, даже если вы ничего не сделаете с ним. Поэтому верните хотя бы действительный заголовок

 header("HTTP/1.0 200"); exit();