Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   XMLHTTPRequest POST метод (https://javascript.ru/forum/misc/1355-xmlhttprequest-post-metod.html)

gaolong 29.06.2008 23:47

XMLHTTPRequest POST метод
 
напишите пожалуйста код как реализовать такую задачу:
есть страница с формой и файл обработчик формы(проверка корректности и сохранение в базу. файл уже зделан). Как зделаать чтобы пост методом XMLHTTPRequest обработать файлом-обработчиком форму.Если неправильно введено данные то в файле есть вывод ошибок(напр. echo "error";). их надо вывести в страницу с формой.Гуглил ничего рабочего не нашёл.

Dmitry A. Soshnikov 30.06.2008 01:06

gaolong, а в чем проблема? - отправляете данные посредством XMLHTTPRequest'a и в самом простом случае, если будет ошибка, печатайте ваш "error" - именно это значение будет доступно в свойстве объекта responseText (ну и дальше соответствующая проверка - if (obj.responseText == 'error' { .. то вывод на страницу ..}))

Цитата:

Сообщение от gaolong
напишите пожалуйста код ... Гуглил ничего рабочего не нашёл

Если у вас вообще нет никаких наработок, то - продолжайте упорно гуглить (на каждом шагу по первому поисковому запросу тысячи примеров работы с аяксом; на этом сайте - тонна полезной инфы, в википедию сходите). Если у вас уже что-то есть, и проблемы в конкретных местах - выкладывайте код проблемного места, - будем разбираться, в чем там дело.

gaolong 30.06.2008 09:44

я делал и по книге и по инету со статей брал...выводят пустоту...может чтото нетак делаю просто...почемуто не обрабатывается и всё....мы с другом сутки мучали...и ничего.Поэтому и прошу чтобы ктото написал правильную работу)

вот 1 из многочисленных попыток...

код index.php
================================================== ==============
<input type="text" id="input_1" /> 
<input type="text" id="input_2" /> 
<input type="button" class="button" value=" Отправить форму  " onclick="process();" /> 

<script language="javascript" type="text/javascript">
var xmlHttp = new XMLHttpRequest();
function process()
{
    if (xmlHttp)
    {     
        try
        { 
            var data1 = document.getElementById("input_1").value;       
            var data2 = document.getElementById("input_2").value;
            var send_post="data1=" + data1 + "&data2=" + data2; 
            xmlHttp.open("POST", "form.php", true); 
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.onreadystatechange = data_obr; 
            xmlHttp.send(send_post); 
   
        }
        catch (e)
        { 
            alert("Не удалось соединиться с сервером:\n" + e.toString());     
        }   
    }
} 
function data_obr()
{
    if (xmlHttp)
    {
        if(xmlHttp.onreadystatechange == 4)
        {
            alert(xmlHttp.responseText);  
        }
    }
}
</script>

================================================== ================
form.php
================================================== ================
<?php
if (isset($_POST['data1']))       
$data1 = $_POST['data1']; 
echo $data1;

?>

================================================== ================
если убрать data_obr то выводит пустое сообение

Kolyaj 30.06.2008 10:59

На форуме есть теги для форматирования кода, кстати.

Как минимум нужно в php-скрипте поменять $_GET на $_POST.

gaolong 30.06.2008 11:01

Вот ещё 1 вариант...тут уже должно работать,но пишет что не обьявлены переменные data1 data2
js.js
----
var xmlHttp=createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
	var xmlHttp;
	
	try
	{
		xmlHttp=new XMLHttpRequest();
	}
	catch(e)
	{
		var XMLHttpVersions=new Array("MSXML2.XMLHTTP.6.0",
									  "MSXML2.XMLHTTP.5.0",
									  "MSXML2.XMLHTTP.4.0",
									  "MSXML2.XMLHTTP.3.0",
									  "MSXML2.XMLHTTP",
									  "Microsoft.XMLHTTP");
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
		{
			try
			{
				xmlHttp= new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if (!xmlHttp)
		alert("error of creating XMLHttpRequest");
	else
		return xmlHttp;
}
function process()
{
	if(xmlHttp)
	{
		try
		{
			var data1 = document.getElementById("input_1").value;       
            var data2 = document.getElementById("input_2").value;
            var send_post="data1=" + data1 + "&data2=" + data2;
			xmlHttp.open("POST","form.php",true);
			xmlHttp.onreadystatechange=handleRequestStateChange;
			xmlHttp.send(send_post);
		}
		catch(e)
		{
			alert("could not connect"+e.toString());
		}
	}
}
function handleRequestStateChange()
{
	myDiv = document.getElementById("myDivElement");
	if (xmlHttp.readyState==1)
	{
		myDiv.innerHTML += "query state 1(sending)<br />";
	}
	else if(xmlHttp.readyState==2)
	{
		myDiv.innerHTML += "query state 2(sended)<br />";
	}
	else if(xmlHttp.readyState==3)
	{
		myDiv.innerHTML += "query state 3(exchanging)<br />";
	}
	else if(xmlHttp.readyState==4)
	{
		if(xmlHttp.status==200)
		{
			try
			{
				response=xmlHttp.responseText;
				myDiv.innerHTML += "query state 4(completed).Server ansver: <br/>";
				myDiv.innerHTML +=response;
			}
			catch(e)
			{
				alert("error of reading"+ e.toString());
			}
		}
		else
		{
			alert("problems fith connecting"+xmlHttp.statusText);
		}
	}
}

index.php
--
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script type="text/javascript" src="js.js"></script>
</head>
<body>

<div id="myDivElement" /><br>
<input type="text" id="input_1" /> 
<input type="text" id="input_2" /> 
<input type="button" class="button" value=" Отправить форму  " onclick="process();" /> 
</body>
</html>

form.php
---
<?php
if (isset($_POST['data1']))       
$data1 = $_POST['data1'];
if (isset($_POST['data2']))       
$data2 = $_POST['data2'];
echo $data1;

echo "<br>";

echo $data2;

?>

gaolong 30.06.2008 11:02

Цитата:

Сообщение от Kolyaj (Сообщение 3374)
На форуме есть теги для форматирования кода, кстати.

Как минимум нужно в php-скрипте поменять $_GET на $_POST.

ой..простите...нетот код отправил формы...там пост.

gaolong 30.06.2008 11:14

Ура! решил) отправку заголовка не хватало в 2 примере) Вот только оно выводит после формы...а как выводить в нужном для меня месте?

и не работает в IE 6.

Dmitry A. Soshnikov 30.06.2008 13:47

Цитата:

Сообщение от gaolong
Вот только оно выводит после формы...

там вообще нет формы, просто input'ы. Сделайте блочное закрытие div'а - <div id="myDivElement"></div>


Часовой пояс GMT +3, время: 00:22.