XMLHttpRequest
Доброго дня,
не мог бы кто пояснить что происходит когда я посылаю запрос : xhttp.open('POST', '/', true); какую роль играет / мне приходит дубликат страницы -то есть копия всего что на странице добавляется на туже страницу только плюс ответ php при чем ответ только во втором экземпляре страницы а отправка данных может быть только с первого оригинального экземпляра кода и если кто знает - как вернуть ответ php а не всего запроса XMLHttpRequest? заранее спасибо страница <html> <head> <script type="text/JavaScript"> function XmlHttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function stat(readyState) { switch (readyState) { case 0: return "не инициализирован"; break; case 1: return "загрузка..."; break; case 2: return "загружено"; break; case 3: return "в процессе..."; break; case 4: return "готово"; break; default: return "неизвестное состояние"; } } function Send_(xhttp) { xhttp.onreadystatechange = function() { if (xhttp.readyState == 4) { if(xhttp.readyState == 4) { if(xhttp.status == 200) { if (!xhttp.responseType || xhttp.responseType === "text") { data = xhttp.responseText; } if (xhttp.responseType === "document") { data = xhttp.responseXML; } document.getElementById("sub").innerHTML = data + ' . : . ' } else { document.getElementById("sub").innerHTML = "Не удалось получить данные: " + xhttp.statusText; } } } } } function sub() { var xhttp = XmlHttp(); xhttp.open('POST', '/', true); xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhttp.send("mod=" + encodeURIComponent( document.getElementById("a").value) ); Send_(xhttp) } </script> </head> <body> <?php $action = isset($_REQUEST['mod'])? $_REQUEST['mod']: ''; if($action) { if($action == 'out') { echo 'ok'; } else { echo $action; } } ?> <input type='text' name='mod' id='a' /> <a href='' id='on' onClick='event.preventDefault();sub()'>send</a> <div id='sub'></div> </body> </html> |
Цитата:
|
А почему возвращается ответ весь этот файл + document.getElementById("a").value?
|
URL не начинающиеся с названия протокола(например, http:)называются относительными, то есть они интерпретируются относительно текущего документа. Когда они начинаются со слеша (/), они заменяют текущий путь – часть после названия сервера. В ином случае часть текущего пути вплоть до последнего слеша помещается перед относительным URL.
|
Conus,
ну и что будет означать /? Браузер подставить домен и получится http://domain/, а это что означает? Если при этом запускать скрипт из другого расположения, то будет подставлен еще и путь относительный скрипту этому. Цитата:
|
А как получить запрос?
я ж его вот получаю <?php $action = isset($_REQUEST['mod'])? $_REQUEST['mod']: ''; if($action) { if($action == 'out') { echo 'ok'; } else { echo $action; } } ?> |
Вообще же используйте $_POST, в $_REQUEST попадают как GET/POST, так данные из сессии, и они будут перезаписываться в том порядке, в котором определена их очередность настройками. То есть, если вы используете $_REQUEST, то должны это учитывать.
Проблема не в том, что вы получаете, а в том где вы их получаете. Фактически здесь xhttp.open('POST', '/', true); можно заменить путь на window.location (или просто location), то есть текущий скрипт, запрос к текущей странице. Судя по ошибке это у вас и происходит. Но такие запросы должны обрабатываться до любого вывода в браузер, то есть: <? php - код обрабатывающий ajax запрос и ответ, и выход - exit(тут данные ответа) ?> <html> а далее html-код страницы |
Часовой пояс GMT +3, время: 08:53. |