Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2018, 19:37
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

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>

Последний раз редактировалось Conus, 05.05.2018 в 19:46.
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2018, 03:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Conus
xhttp.open('POST', '/', true); какую роль играет /
Не роль, а параметр XMLHttpRequest, который задает сетевой путь, и / это корень документов, то это обращение к индексному файлу.
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2018, 07:39
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

А почему возвращается ответ весь этот файл + document.getElementById("a").value?
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2018, 07:55
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

URL не начинающиеся с названия протокола(например, httpназываются относительными, то есть они интерпретируются относительно текущего документа. Когда они начинаются со слеша (/), они заменяют текущий путь – часть после названия сервера. В ином случае часть текущего пути вплоть до последнего слеша помещается перед относительным URL.
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2018, 08:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Conus,
ну и что будет означать /?

Браузер подставить домен и получится http://domain/, а это что означает?

Если при этом запускать скрипт из другого расположения, то будет подставлен еще и путь относительный скрипту этому.

Сообщение от Conus
А почему возвращается ответ весь этот файл + document.getElementById("a").value?
Потому, что это вывод в браузер, а надо получить запрос, обработать, ответить клиенту и завершить работу скрипта.
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2018, 09:21
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

А как получить запрос?
я ж его вот получаю

<?php
$action = isset($_REQUEST['mod'])? $_REQUEST['mod']: '';

if($action) { if($action == 'out') { echo 'ok'; } else { echo $action; } }

?>
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2018, 09:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вообще же используйте $_POST, в $_REQUEST попадают как GET/POST, так данные из сессии, и они будут перезаписываться в том порядке, в котором определена их очередность настройками. То есть, если вы используете $_REQUEST, то должны это учитывать.

Проблема не в том, что вы получаете, а в том где вы их получаете. Фактически здесь xhttp.open('POST', '/', true); можно заменить путь на window.location (или просто location), то есть текущий скрипт, запрос к текущей странице. Судя по ошибке это у вас и происходит. Но такие запросы должны обрабатываться до любого вывода в браузер, то есть:

<?
php - код обрабатывающий ajax запрос
и ответ, и выход - exit(тут данные ответа)
?>
<html>
а далее html-код страницы
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XMLHttpRequest передача массива серверу JaneLane AJAX и COMET 5 16.05.2014 12:09
запрос на другой сайт XMLHttpRequest vscorpion Internet Explorer 9 24.12.2013 16:46
xmlHttpRequest подскажите czp AJAX и COMET 4 10.12.2012 23:23
XMLHttpRequest status=0, хотя запрос проходит. arigasa AJAX и COMET 4 15.02.2011 20:14
Создание и уничтожение XMLHttpRequest Vlas AJAX и COMET 9 22.05.2009 12:38