Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2011, 11:15
Новичок на форуме
Отправить личное сообщение для Rokugan Посмотреть профиль Найти все сообщения от Rokugan
 
Регистрация: 22.09.2011
Сообщений: 9

Передача данных из JS в PHP - что не так?
Прошу заранее прощения за возможное ламерство, так как с JS только начал знакомиться.
Возникла задача - передать каким-то образом некое значение из скрипта обратно в PHP. Почитал форумы, сделал тестовый пример - и не работает. Как говорится, что я делаю не так?
Есть php файл примерно такой (заголовки опускаю)
<script src="test.js"></script>
<script type="text/javascript">
var x = 3;
var php_source = "http://mysite/test.php";
</script>

<img src="http://mysite.ru/test.png" onclick="testing();">

<?php
if (isset($_POST['count']))
{
$count=$_POST['count'];
echo 'Счетчик - '.$count;
} else { echo 'Упс';}

?>


И есть этот test.js
function testing() {

var http_request = false;

   if (window.XMLHttpRequest)
   { // Mozilla, Safari, ...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType)
      {
         http_request.overrideMimeType('text/xml');
         // Читайте ниже об этой строке
      }
   }
   else if (window.ActiveXObject)
   { // IE
      try
      {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try
         {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
      }
   }


   if (!http_request)
   {
      alert('Не вышло :( Невозможно создать экземпляр класса XMLHTTP ');
      return false;
   }

   http_request.onreadystatechange = function() { alertContents(http_request); };
   http_request.open('POST', php_source, true);
   http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
   http_request.send('count='+x);
}

function alertContents(http_request) {
              
				  if (http_request.readyState ==4) {
				  
				  }

}


По идее, мне бы хотелось, что в переменную $count из массива $_POST попала бы ранее определенная переменная х - но вместо этого выводится текст "Упс", т.е. $_POST['count'] не определен.
Где ошибка закралась?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 22.09.2011, 11:47
Интересующийся
Отправить личное сообщение для Genius Посмотреть профиль Найти все сообщения от Genius
 
Регистрация: 13.09.2011
Сообщений: 17

Гораздо проще, имхо, через $_GET передать данные...
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2011, 12:50
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

1. Можно просто прописать var http_request = XMLHttpRequest();
2. Делай две проверки, if(http_request.readyState == 4) и if(http_request.status == 200);
Ответить с цитированием
  #4 (permalink)  
Старый 22.09.2011, 13:50
Новичок на форуме
Отправить личное сообщение для Rokugan Посмотреть профиль Найти все сообщения от Rokugan
 
Регистрация: 22.09.2011
Сообщений: 9

А все таки - почему может не работать данный код?
Проверки или там GET - это здорово, но почему так-то не работает?
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2011, 21:32
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Rokugan Посмотреть сообщение
function testing() {

var http_request = false;

   if (window.XMLHttpRequest)
   { // Mozilla, Safari, ...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType)
      {
         http_request.overrideMimeType('text/xml');
         // Читайте ниже об этой строке
      }
   }
   else if (window.ActiveXObject)
   { // IE
      try
      {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try
         {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
      }
   }


   if (!http_request)
   {
      alert('Не вышло :( Невозможно создать экземпляр класса XMLHTTP ');
      return false;
   }

*!*
   http_request.onreadystatechange = function() { alertContents(http_request); };
   http_request.open('POST', php_source, true);
   http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
   http_request.send('count='+x);
*/!*

}

function alertContents(http_request) {
              
				  if (http_request.readyState ==4) {
				  
				  }

}

// params = "count=2" (string)
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
*!*
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
*/!*
http.send(params);
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2011, 18:04
Новичок на форуме
Отправить личное сообщение для Rokugan Посмотреть профиль Найти все сообщения от Rokugan
 
Регистрация: 22.09.2011
Сообщений: 9

Добавил в меру своего разумения указанные строчки...и все равно не работает.
Судя по FireBug, POST запрос проходит успешно, только вот в php файле получить переменную count не получается.
Плиз хелп! Просто не понимаю, в чем косяк - вроде ж должно работать.
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2011, 18:28
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

что-нибудь пересылается в запросе?
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2011, 15:45
Новичок на форуме
Отправить личное сообщение для Rokugan Посмотреть профиль Найти все сообщения от Rokugan
 
Регистрация: 22.09.2011
Сообщений: 9

Сообщение от melky Посмотреть сообщение
что-нибудь пересылается в запросе?
Простите за глупый вопрос, но как это понять?
Если в самом скрипте поставить вывод переменной "х", то она отображается правильно.
В файрбаге POST запрос без ошибок показывается, но в php, который этот запрос передается, ничего нет. Т.е. похоже, что не пересылается - но как это точно отловить, я не знаю, увы.
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2011, 16:50
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

это значит вот это :
Сообщение от Rokugan Посмотреть сообщение
В файрбаге POST запрос без ошибок показывается
т.е. переменная пересылается. точно?

тогда в начале php скрипта проверьте, чо тама переслалось

это можно сделать так.

echo "<pre>";
print_r( $_POST );
die('</pre>');
Ответить с цитированием
  #10 (permalink)  
Старый 28.09.2011, 22:02
Новичок на форуме
Отправить личное сообщение для Rokugan Посмотреть профиль Найти все сообщения от Rokugan
 
Регистрация: 22.09.2011
Сообщений: 9

Сообщение от melky Посмотреть сообщение
это значит вот это :
т.е. переменная пересылается. точно?
тогда в начале php скрипта проверьте, чо тама переслалось
Вот в чем и собака порылась...
Файрбаг пишет:
POST http://www.site.ru/test.php [HTTP/1.1 200 OK 16мс]
Т.е. вроде бы все успешно передалось.
А в php приходит пустой $_POST - ваш код проверки показывает Array ()
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
способы организации кода melky Общие вопросы Javascript 17 01.10.2011 22:57
Php + js, получить данные DorianLeroy Общие вопросы Javascript 3 07.07.2011 17:25
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
Что означает конструкция ? ivanmara Общие вопросы Javascript 55 07.01.2009 02:54
PHP, JavaScript, MySQL solomusic Серверные языки и технологии 14 18.12.2008 14:05