|
|
|
| Вот собственно пытаюсь с помощью его отослать содержание текстового поля в базу
Подскажите, что делаю не так
<script language='javascript'><!--
var req = false;
if (window.XMLHTTPRequest)
req = new XMLHTTPRequest();
elseif (window.ActiveXObject)
req = new ActiveXObject ('Microsoft.XMLHTTP');
function sendmsg()
{
if (!req)
{
alert ('AJAX не запущен');
return;
}
var msg = document.getElementById('msg').value;
req.open ('POST', 'send.php', 1);
req.onReadyStateChange =
function()
{
if (req.status==200) alert ('Отправлено');
}
req.send ('message='+msg);
req.close();
}
//--></script>
<input id='msg' />
<input type='button' onclick='sendmsg()' />
|
| |
|
|
|
|
|
|
|
для: bronenos
(21.02.2007 в 15:21)
| | Как на мой взгляд - так ВСЕ неправильно. | |
|
|
|
|
|
|
|
для: coloboc66
(21.02.2007 в 16:37)
| | Вас не затруднит написать как это должно выглядеть? | |
|
|
|
|
|
|
|
для: bronenos
(21.02.2007 в 17:38)
| |
// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
// will store the reference to the XMLHttpRequest object
var xmlHttp;
// this should work for all browsers except IE6 and older
try
{
// try to create XMLHttpRequest object
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
// assume IE6 or older
var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
// try every prog id until one works
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
{
try
{
// try to create XMLHttpRequest object
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
catch (e) {}
}
}
// return the created object or display an error message
if (!xmlHttp)
alert("Error creating the XMLHttpRequest object.");
else
return xmlHttp;
}
// Обработка запроса
function process1()
{
// only continue if xmlHttp isn't void
if (xmlHttp)
{
// try to connect to the server
try
{
var param = sel.cat1.options[sel.cat1.selectedIndex].value; //получаю значение из списка select
// initiate reading a file from the server
xmlHttp.open("GET", "select_one.php?param=" + param, true);
xmlHttp.onreadystatechange = handleRequestStateChange1;
xmlHttp.send(null);
}
// display the error in case of failure
catch (e)
{
alert("Can't connect to server:\n" + e.toString());
}
}
}
// function called when the state of the HTTP request changes
function handleRequestStateChange1()
{
// when readyState is 4, we are ready to read the server response
if (xmlHttp.readyState == 4)
{
// continue only if HTTP status is "OK"
if (xmlHttp.status == 200)
{
try
{
// do something with the response from the server
handleServerResponse1();
}
catch(e)
{
// display error message
alert("Error reading the response: " + e.toString());
}
}
else
{
// display status message
alert("There was a problem retrieving the data:\n" +
xmlHttp.statusText);
}
}
}
// handles the response received from the server
function handleServerResponse1()
{
var response = decodeURI(xmlHttp.responseText);
myDiv = document.getElementById('divCat2');
myDiv.innerHTML = response;
}
|
| |
|
|
|
|
|
|
|
для: zelen
(21.02.2007 в 17:52)
| | Мне ПОСТ нужен
И еще надо как то защититься... чтоб данные принимались только от моего скрипта.... | |
|
|
|
|
|
|
|
для: bronenos
(21.02.2007 в 18:50)
| | Да - вот так, примерно, только при методе POST одна строка будет выглядеть по-другому. А данные и так будут приниматься только от вашего скрипта - здесь идет запрет из соображений безопасности на на уровне броузера. А если все-таки хотите защититься - простенький РНР-скрипт для определения того, с какого хоста приходит запрос - если не со своего, то выход из скрипта. | |
|
|
|
|
|
|
|
для: coloboc66
(22.02.2007 в 09:31)
| | 1. С чего вы взяли, что данные будут только от меня приниматься
2. Referer подделать можно | |
|
|
|
|
|
|
|
для: bronenos
(22.02.2007 в 22:13)
| | Ничего подделывать не пробовал, но когда в скрипте аякса ставил url="http://somehostname/...", при запросе получал ошибку ява-скрипт "Разрешение отклонено". На форуме по этому вопросу консультировался и мне сказали - читай документацию аякса - так и должно быть. А подделать все можно, можно и Виндовс Виста сломать. | |
|
|
|
|
|
|
|
для: coloboc66
(23.02.2007 в 09:14)
| | Ну так а если кто нибудь сделает форму
Тогда сможет мне любую слать информацию через POST
А мне надо только от моего сайта | |
|
|
|
|
|
|
|
для: bronenos
(23.02.2007 в 10:06)
| | Ну говорю же - аякс запрещает работу с чужим хостом. А как бороться со взломщиками - это уже совсем другая тема. Откройте новую тему тогда. | |
|
|
|
|
|
|
|
для: zelen
(21.02.2007 в 17:52)
| | Странно... когда было так
var req = false;
if (window.XMLHTTPRequest)
req = new XMLHTTPRequest();
elseif (window.ActiveXObject)
req = new ActiveXObject ('Microsoft.XMLHTTP');
this.handler = req;
|
то все работало
А когда сделал так то ИЕ работает, а Опера нет
try
{
this.handler = new XMLHTTPRequest();
this.ie = false;
return true;
}
catch (e)
{
try
{
this.handler = new ActiveXObject ('Microsoft.XMLHTTP');
this.ie = true;
return true;
}
catch (e)
{
this.handler = false;
this.ie = false;
return false;
}
}
|
| |
|
|
|
|
|
|
|
для: bronenos
(23.02.2007 в 23:20)
| | Накпомню, что в JavaScript учитывается регистр символов. XMLHttpRequest и XMLHTTPRequest - Это разные вещи | |
|
|
|
|
|
|
|
для: Фитч
(24.02.2007 в 10:47)
| | Нет, работало у меня в том случае
XMLHTTPRequest | |
|
|
|
|
|
|
|
для: bronenos
(24.02.2007 в 11:08)
| | Ну и заодно... почему у меня не получается производить с объектом responseXML те же действия, как если бы я сделал
var obj = new ActiveXObject ('Microsoft.XMLDOM');
obj.onload = process;
obj.load (response);
Как его разбирать? responseXML... | |
|
|
|
|
|
|
|
для: Фитч
(24.02.2007 в 10:47)
| | блин, никак не пойму, почему Опера не работает! Вот участок кода:
try
{
this.handler = new XMLHttpRequest();
this.msie = false;
return true;
}
catch (e)
{
// попытка для IE
}
|
| |
|
|
|