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