Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2012, 16:45
Аспирант
Отправить личное сообщение для phenix79 Посмотреть профиль Найти все сообщения от phenix79
 
Регистрация: 19.12.2011
Сообщений: 40

Не могу отправить данные с помощью 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, подскажите в чем может быть причина?
Спасибо заранее!!!

Последний раз редактировалось phenix79, 14.01.2012 в 17:09.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2012, 17:07
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

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

XMLHttpRequestObject.send("b=5");

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

Последний раз редактировалось devote, 14.01.2012 в 17:15.
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2012, 19:48
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

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

как то так нужно:
XMLHttpRequestObject.send("b=5");
XMLHttpRequestObject.send("b=5&f=8");
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)

Последний раз редактировалось Tim, 14.01.2012 в 19:53.
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2012, 19:57
Аспирант
Отправить личное сообщение для phenix79 Посмотреть профиль Найти все сообщения от phenix79
 
Регистрация: 19.12.2011
Сообщений: 40

Сообщение от devote Посмотреть сообщение
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 не отсылается....
Не могу понять ничего...подскажите почему???!!!
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2012, 20:01
Аспирант
Отправить личное сообщение для phenix79 Посмотреть профиль Найти все сообщения от phenix79
 
Регистрация: 19.12.2011
Сообщений: 40

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

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

Все равно ничего не выходит...
Ответить с цитированием
  #7 (permalink)  
Старый 14.01.2012, 20:11
Аспирант
Отправить личное сообщение для phenix79 Посмотреть профиль Найти все сообщения от phenix79
 
Регистрация: 19.12.2011
Сообщений: 40

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

Все решил проблему..огроменное спасибо всем!!!
поставил тип заголовка..и все заработало...
Спасибо!!!
Ответить с цитированием
  #8 (permalink)  
Старый 14.01.2012, 20:31
Аспирант
Отправить личное сообщение для phenix79 Посмотреть профиль Найти все сообщения от phenix79
 
Регистрация: 19.12.2011
Сообщений: 40

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

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

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


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

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

Последний раз редактировалось phenix79, 14.01.2012 в 20:56.
Ответить с цитированием
  #9 (permalink)  
Старый 14.01.2012, 21:47
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

XMLHttpRequestObject.send("b="+escape(b))
Ответить с цитированием
  #10 (permalink)  
Старый 14.01.2012, 21:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

а лучше юзать encodeURI или encodeURIComponent
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправить данные , посмотрите что не так Sadist_dead AJAX и COMET 0 26.11.2011 15:21
xml данные c помощью extjs mrshakirov ExtJS 1 11.10.2011 19:06
как с помощью js отправить данные??? systemiv Общие вопросы Javascript 28 02.10.2011 18:16
Отправить данные с контейнера (XMLHttpRequest) vladikas Библиотеки/Тулкиты/Фреймворки 7 26.11.2010 17:47
Post запрос с помощью xmlhttprequest cyberx AJAX и COMET 7 28.03.2010 12:10