Во-первых, это не совсем идеальный способ настройки страницы, однако необходимо распространять скрипт в виде 1 файла.
У меня есть php-скрипт в верхней части документа xhtml с javascript, и при определенных условиях я использую XHR для отправки строки запроса на саму страницу. Затем php вверху активируется и сохраняет переданный контент как сеанс, а затем убивает себя (exit()). XHR является асинхронным и никогда не проверяется, возвращает ли он контент.
Однако в Firefox 3 консоль ошибок выдает ошибку no element found
каждый раз, когда отправляется запрос XHR. Кроме того, если я использую выход, такой как exit('Done')
, Firefox выдает синтаксическую ошибку (Готово), как будто он вставляет его в видимую DOM. В Опере такого не наблюдается.
Есть ли лучший способ сохранить сеанс с уже сгенерированной страницы 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, которую я использую, ссылается на строку запроса, которая никогда не вызывается.
Content-Length: 0
) - person mems   schedule 09.11.2014