Передача данных из 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'] не определен. Где ошибка закралась? Спасибо! |
Гораздо проще, имхо, через $_GET передать данные...
|
1. Можно просто прописать var http_request = XMLHttpRequest();
2. Делай две проверки, if(http_request.readyState == 4) и if(http_request.status == 200); |
А все таки - почему может не работать данный код?
Проверки или там GET - это здорово, но почему так-то не работает? |
Цитата:
// 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); |
Добавил в меру своего разумения указанные строчки...и все равно не работает.
Судя по FireBug, POST запрос проходит успешно, только вот в php файле получить переменную count не получается. Плиз хелп! Просто не понимаю, в чем косяк - вроде ж должно работать. |
что-нибудь пересылается в запросе?
|
Цитата:
Если в самом скрипте поставить вывод переменной "х", то она отображается правильно. В файрбаге POST запрос без ошибок показывается, но в php, который этот запрос передается, ничего нет. Т.е. похоже, что не пересылается - но как это точно отловить, я не знаю, увы. |
это значит вот это :
Цитата:
тогда в начале php скрипта проверьте, чо тама переслалось это можно сделать так. echo "<pre>"; print_r( $_POST ); die('</pre>'); |
Цитата:
Файрбаг пишет: POST http://www.site.ru/test.php [HTTP/1.1 200 OK 16мс] Т.е. вроде бы все успешно передалось. А в php приходит пустой $_POST - ваш код проверки показывает Array () |
Цитата:
Цитата:
ройтесь в скрипте. покажите его. |
Цитата:
Скрипт тестовый, хотел понять, как работает передача данных из JS в PHP. Так пока и не понял. Правда ,если пойти другим путем - в php сгенерить форму со скрытым полем, типа <form method="post"> <input type="hidden" name="tform" value="" /> </form> А в скрипте написать var f = document.forms[0]; f.tform.value = params; f.submit(); То потом в $_POST можно этот params успешно отловить. Есть ли косяки у такого способа, по сравнению с XMLHTTPRequest? |
да-он синхронный. правда, можно указать target форме.
используйте ajax. |
Цитата:
Не передается, хоть тресни - что POST, что GET. Причем пробовал даже на разных хостингах. Могут ли какие то настройки PHP на сервере на это влиять? В любом случае спасибо вам за помощь! |
нет. это мы запрос неверно отправляем :)
с таким кодом : var callback = function(data,req){ // выполнится по завершении запроса. this - req. alert(data); }; var ajax=new XMLHttpRequest(); ajax.onreadystatechange=function(){ if( ajax.readyState==4 ){ callback.call( ajax,ajax.responseText,ajax ); } }; ajax.open("POST", "/echo/html/"); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.send("myvar=mylolko"); данные (myvar=mylolko) отправляются. я проверил в jsfiddle :) |
Цитата:
Спасибо! Данные действительно передаются, только обработчик то мой ничего обратно не возвращает, поэтому на странице, с которой вызывался скрипт, ничего и не меняется. responseText вернул всё правильно, теперь вопрос, что с этим делать :) В общем следующий вопрос, попробую сформулировать, и заранее прошу прощения за тупость :) Вот возьмем нмой пример. Если мы вызываем JS скрипт из некоего php, а обрабатывает POST, сделанный в этом JS скрипте, снова тот же php-файл, то в responsetext у нас оказывается целиком результат работы php, т.е. фактически вся страничка. Значит ли это, что php-обработчик, который мы вызываем в ajax.open, должен быть отдельным, другим php, не тем же самым, в котором мы формировали страничку для пользователя с картинкой и прочим? Т.е. в нем я уже сделаю нужные манипуляции, а потом выведу responsetext куда мне надо через document.getElementById к примеру? Или же можно из responsetext как-то выдрать нужный мне элемент сразу? Еще раз спасибо вам, кажется я стал потихоньку понимать, как что работает :) |
Цитата:
Цитата:
Цитата:
// ajax responseText var text = '<body>*!*<div class="myclass">нужный текст</div>*/!*<div>ненужный текст</div></body>'; // создаем контейнер var a = document.createElement("span"); // помещаем в него загруженный html a.innerHTML = text; // вуаля. в контейнере полноценные html-элементы var myElement = a.querySelector("div.myclass"); // для проверки выведем его содержимое alert( myElement.innerHTML ); // "нужный текст" |
Часовой пояс GMT +3, время: 02:14. |