Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не могу отправить данные с помощью XMLHttpRequest (https://javascript.ru/forum/events/24804-ne-mogu-otpravit-dannye-s-pomoshhyu-xmlhttprequest.html)

phenix79 14.01.2012 16:45

Не могу отправить данные с помощью XMLHttpRequest
 
Никак не могу отправить данные на обработчик PHP с javasqript кода.

Имею HTML файл с формой в форме есть кнопка, и блок ДИВ отдельно, в ДИВе должно появляться сообщение полученое от обработчика check.php и текст который находится по умолчанию в ДИВе заменяется на тот который получаем от сервера.
Вот файл HTML:
<form> <input name="button" type="button" value="Отправить"  onclick = "getData('check.php', 'targetDiv') ">
    </form><br>
   <div id="targetDiv"> <p>Полученое от сервера сообщение появится ЗДЕСЬ!!!</p></div>


При нажатии на кнопку вызывается функция getData() из javascript..
javascript вынесен в отдельный файл
Вот код javascript:
var XMLHttpRequestObject = false;//Создаем переменную
var b=5;
//Для кроссбраузерности и для старых браузеров создаем конструкцию
      if (window.XMLHttpRequest) {//Для современных браузеров (если браузер поддерживает XMLHttpRequest объект)
        XMLHttpRequestObject = new XMLHttpRequest();//то создаем экземпляр объекта с именем XMLHttpRequestObject
      } else if (window.ActiveXObject) {//Для старых браузером создающих СОМ объект
        XMLHttpRequestObject = new 
          ActiveXObject("Microsoft.XMLHTTP");
      }

      function getData(dataSource, divID) //Предаем в качестве параметра функции источник данных в нашем случае файл data.txt и ID нашего <div> в который будет записываться информация из файла check.php
      { 
        if(XMLHttpRequestObject) {
          var obj = document.getElementById(divID); //Присваиваем переменной obj имя объекта ДИВ
          XMLHttpRequestObject.open("POST", dataSource,true); //Открываем запрос, где POST это метод передачи информации, можно применять другие методы например POST, PUT, HEAD,или PROPFIND и dataSource это адрес URL сервера с данными в нашем случае просто файл data.txt

          XMLHttpRequestObject.onreadystatechange = function() //Присваиваем свойству "onreadystatechange" функцию которая будет //выполняться при смене состояния объекта. "onreadystatechange" - это Обработчик события, которое происходит при каждой смене состояния объекта. Имя должно быть записано в нижнем регистре.
          { 
            if (XMLHttpRequestObject.readyState == 4 && //Текущее состояние объекта (0 — не инициализирован, 1 — открыт, 2 — отправка данных, 3 — получение данных и 4 — данные загружены)
              
			  XMLHttpRequestObject.status == 200) { //	HTTP-статус в виде числа (404 — «Not Found», 200 — «OK» и т. д.)
                obj.innerHTML = XMLHttpRequestObject.responseText; 
            } 
          } 

         XMLHttpRequestObject.send(b); //Отправляет запрос и получает данные 
        }
      }


Ну и собственно обработчик "check.php" который по сути должен получать методом POST в асинхронном режиме данные и вернуть что то назад, а вернуть я хочу значение той же переменной что и получаю то есть цифра 5 должна по сути высветиться , но я никак не могу этого сделать(((
<?php 
$b=$_POST['b'];
echo $b;

?>


Дело в том что все работает если отправляешь с "check.php" какие либо данные, а вот принимать от не хочет...
На 99 % уверен что делаю неправильно ajax запрос в в файле с javascript, подскажите в чем может быть причина?
Спасибо заранее!!!

Gvozd 14.01.2012 17:07

Если вы хотите послать GET-запрос, то вам достаточно написать check.php?b=5
А вот с POST-запросами, чуточку сложнее
читать тут: http://xmlhttprequest.ru/#encoding
От того, что вы просто объявили локальную переменную var b=5;, она магическим образом не пошлется на сервер(представьте какой хаос бы творился, если бы все переменные из вашего кода слались бы на сервер)
Надо

devote 14.01.2012 17:12

XMLHttpRequestObject.send("b=5");

и не забываем указать тип POST'а перед отправкой данных:
XMLHttpRequestObject.setRequestHeader( "Content-Type",  "application/x-www-form-urlencoded" );

Tim 14.01.2012 19:48

проблема в отсутствии Content-Type
и XMLHttpRequestObject.send(b)

как то так нужно:
XMLHttpRequestObject.send("b=5");
XMLHttpRequestObject.send("b=5&f=8");

phenix79 14.01.2012 19:57

Цитата:

Сообщение от devote (Сообщение 150540)
XMLHttpRequestObject.send("b=5");

и не забываем указать тип POST'а перед отправкой данных:
XMLHttpRequestObject.setRequestHeader( "Content-Type",  "application/x-www-form-urlencoded" );

пробовал и так отправлять
XMLHttpRequestObject.send("b=5");

все равно не получает он данные...

сделал проверку...
в check.php
создал переменную..и попытался просуммировать с переменной которая была отослана...
$b=$_POST['b'];
$a=3;
$c=$a+$b;
echo $c;


Отсылается только тройка...то есть переменная $a..
Следовательно $b не отсылается....
Не могу понять ничего...подскажите почему???!!!

phenix79 14.01.2012 20:01

Цитата:

Сообщение от Gvozd (Сообщение 150537)
Если вы хотите послать GET-запрос, то вам достаточно написать check.php?b=5
А вот с POST-запросами, чуточку сложнее
читать тут: http://xmlhttprequest.ru/#encoding
От того, что вы просто объявили локальную переменную var b=5;, она магическим образом не пошлется на сервер(представьте какой хаос бы творился, если бы все переменные из вашего кода слались бы на сервер)
Надо

Спасибо за ответ...но я не просто объявил переменную..
Она у меня в коде в методе send() находится...посмотрите..
пробовал и так
XMLHttpRequestObject.send(b);

и так
XMLHttpRequestObject.send("b=5");

Все равно ничего не выходит...

phenix79 14.01.2012 20:11

XMLHttpRequestObject.setRequestHeader( "Content-Type",  "application/x-www-form-urlencoded" );
[/quote]

Все решил проблему..огроменное спасибо всем!!!
поставил тип заголовка..и все заработало...
Спасибо!!!

phenix79 14.01.2012 20:31

Опять столкнулся с проблемой...
дело в том что мне нужно отправлять данные из текстового поля...
делаю так...
Получаю то что ввели в текстовое поле..
var b=window.document.forms.asa['captch'].value;

затем вставляю переменную в метод send()

XMLHttpRequestObject.send("b="+b);


то есть это равнозначно что было бы так
XMLHttpRequestObject.send("b=данные с текстового поля");

Но опять не работает...что опять неправильно сделал???

devote 14.01.2012 21:47

XMLHttpRequestObject.send("b="+escape(b))

devote 14.01.2012 21:50

а лучше юзать encodeURI или encodeURIComponent


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