Подтвердить что ты не робот

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

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

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

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

Есть ли лучший способ сохранить сеанс с уже сгенерированной страницы xhtml? Очевидно, я мог бы XHR на другую страницу, но я бы предпочел сохранить все на одном script. Поддерживает ли 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, которую я использую, ссылается на строку запроса, которая никогда не вызывается.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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