Во-первых, это не совсем идеальный способ настройки страницы, однако необходимо распространять скрипт в виде 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-страницу, ссылается на строку запроса, которая никогда не вызывается.