Вход

Просмотр полной версии : Создание асинхронного пост запроса


(Sandr)
04.08.2011, 23:02
И снова здрасте)
одскажите, что не так в этом коде?

<script>
function myf() {
var loadContent = document.getElementById('content');
var request = XMLHttpRequest();
request.open("POST", "/1.php");
request.send(null)
if(request.status == 200)
loadContent.innerHTML = request.responseText;
else
loadContent.innerHTML = "Error" + request.status + " : " + request.statusText;
}
</script>
<div id="content"></div>
<a href="javascript:void(0)" onclick="myf()">Загрузить</a>

ваый
04.08.2011, 23:13
где onreadystatechange?

(Sandr)
05.08.2011, 22:18
ваый,

Упс, забыл про него.. Попробовал по другому. Взял пример с этого сайта и немножко его переделал, но переменная "qw" не передаётся через метод пост, хотя всё остальное загружается.

Вот содержание скрипта:
<script>
function getXmlHttp(){
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 vote() {
var req = getXmlHttp()
var statusElem = document.getElementById('content');

req.onreadystatechange = function() {
if (req.readyState == 4) {
statusElem.innerHTML = req.statusText; // показать статус (Not Found, ОК..)
if(req.status == 200) {
statusElem.innerHTML = "Ответ сервера: "+req.responseText;
}
}
}
req.open('POST', '/1.php', true);
var qw = 'sdg123';
req.send(qw); // отослать запрос
statusElem.innerHTML = 'Ожидаю ответа сервера...'
}
</script>
<div id="content"></div>
<a href="javascript:void(0)" onclick="vote()">Загрузить2</a>

А это содержание файла 1.пхп

<?php
echo 'Данные загружены!<br>';
echo 'Пост запрос переменной qwerty - '.$_POST['qw'];
echo '<br>Гет запрос переменной qwerty - '.$_GET['qw'];
?>

ваый
05.08.2011, 23:20
var qw = 'sdg123';
var params = 'qw=' + qw +'&param2=value2';
req.send(params);

(Sandr)
06.08.2011, 23:31
ваый,
не сработало(

ваый
06.08.2011, 23:58
Должно работать. Значит, где-то еще косяк.

(Sandr)
07.08.2011, 15:28
ваый,
Не мог бы ты посмотреть этот видео-скрин. Там полностью и код и то, как у меня в браузере всё это изображено. (для просмотра в названии файла нужно убрать .zip)

ваый
07.08.2011, 16:04
А так?
var req = getXmlHttp();
var statusElem = document.getElementById('content');

req.onreadystatechange = function() {
if (req.readyState == 4) {
statusElem.innerHTML = req.statusText; // показать статус (Not Found, ОК..)
if(req.status == 200) {
statusElem.innerHTML = "Ответ сервера: "+req.responseText;
}
}
}

*!*req.open('POST', '/1.php', true);*/!*
*!*req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");*/!*

var qw = 'qw=123123';
req.send(qw);

ваый
07.08.2011, 16:11
И еще. Логичнее сначала проверять на XMLHttpRequest, а уже потом на ActiveXObject, потому что браузеров, которые используют XMLHttpRequest больше.
function getXmlHttp() {
var xhr;

if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

return xhr;
}

(Sandr)
07.08.2011, 18:29
ваый,
добавил эту строку и заработало: req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

Спасибо))