Ошибка Firefox «элемент не найден» - PullRequest
21 голосов
/ 10 июня 2009

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

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

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

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

Ответы [ 2 ]

25 голосов
/ 10 июня 2009

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

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

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

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

0 голосов
/ 10 июня 2009

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

header("HTTP/1.0 200");
exit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...