Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создание асинхронного пост запроса (https://javascript.ru/forum/misc/19458-sozdanie-asinkhronnogo-post-zaprosa.html)

(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

Вложений: 1
ваый,
Не мог бы ты посмотреть этот видео-скрин. Там полностью и код и то, как у меня в браузере всё это изображено. (для просмотра в названии файла нужно убрать .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");

Спасибо))


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