Проблема переключения между WEB старницами при использовании AJAX
- Войдите на сайт для отправки комментариев
Всем привет!
Столкнулся с такой проблемой... раньше при использовани web-сервера на arduino при переключении между старницами все работало как надо. Потом решил уйти от лишней перезагрузки (обновлении) страниц при каждом изменении отображаемого параметра, решил использовать в HTML AJAX. С ним тоже разобрался, только теперь стал вопрос с корректностью отображения страниц.
Дело в том, что при использовании AJAX, не требуется при пересылке данных обновлять целиком всю страницу, передаваемые данные отображаются в конкретно выведенной для этой обасти в HTML странице. С этим проблем никаких нет, все работает четко. :) Только, при переходе на другую страницу по какому либо событию, эта новая страница начинает отображаться в области AJAX предыдущей страницы. Т.е. получается страница становится вложенной в другую страницу. Такое вот наслоение...
Как правильно можно переключиться между страницами, кто нибудь сталкивался с этим?
Переключение вида, средствами arduino:
glb_client.println("HTTP/1.1 200 OK");
glb_client.println("Content-Type: text/html");
glb_client.println("Connnection: close");
glb_client.println();
webFile = SD.open("/switch.htm");
не помогает... так новая страница помещается в AJAX область текущей. :(
Все еще актуально.. (
Переход по ссылкам на web странице действиями пользователя происходит нормально. Полностью грузится новая страница. При переходе по событию средствами arduino, перехода нет, новая страница открывается в AJAX области старой страницы. :(
Пробовал так же передавать в область вывода <div> через AJAX ява код:
без результата... Создается впечатление, что в AJAX редирект на другую страницу не работает. Помогите, хоть кто нибудь, все молчат... наверное далеко ушел. ))))) Тыкаюсь с Mega2560 + W5100
Проблема решена, от вас ответа конечно не дождался, но может кому пригодится.. AJAX не делает редиректа на другие страницы, он вообще ничего не делает, только просто выводит данные, которые посылает ардуино в тело html страницы.
Пытался найти решение средствами Ардуино, но так и не нашел. Если у клиента уже работает AJAX, то пофиг ему, что присылает сервер ардуино, он просто это отобразит в нужной области и все на этом... Изменил подход к решению проблемы, перенес блок обработки на сторону клиента. Т.е. обработку редиректа осуществляет сам HTML файл путем яваскрипт. Вот код обработчика:
function access() { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { if (this.responseText != null) { var result=this.responseText; result=result.replace(/\r|\n/g, ''); if (result == "switch.htm") { location = '/switch.htm'; } else { document.getElementById("message").innerHTML = this.responseText; } } } } } request.open("GET", "rcpdu?login="+document.getElementById("login").value+"&pass="+document.getElementById("password").value, true); request.send(null); }Функция проверяет на стороне клиента наличие содержимого в строке "switch.htm" от сервера ардуино, если таковое имеется, то осуществляем редирект на эту страницу. Если содержимое строки отличается, значит пришел служебный текст или простое сообщение, тогда мы просто выводим его в области <div> на странице.
Долбался с этим почти неделю.. )))))))))