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, время: 07:51. |