
30.05.2011, 17:51
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
ajax не отрабатывает
Здравствуйте, написал на php переписку пользователей, по какому-то из товаров в магазине, пытаюсь переделать добавление сообщения при помощи ajax
function addOpinion($id) // добавления отзыва
{
$this->formOpinion(); //просто форма
$nm = $_POST['opName'];
$em = $_POST['opEmail'];
$txt = $_POST['opText'];
?>
<script type="text/javascript">
function Load()
{
var xmlhttp = getXmlHttp();
//кроссбраузерный метод Создания объекта запроса XMLHttpRequest.
//саму функцию не показываю, рабачая, проверял
var path = "<? echo $_SERVER['PHP_SELF']; ?>";
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
alert("Ответ сервера: "+xmlhttp.responseText);
}
}
xmlhttp.open('post', path, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//
xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
}
</script>
<?
//проверка если поля формы пустые и введенный номер соответствует тому что на капче
if((strcmp($nm,'') > 0) && (strcmp($em,'') > 0) && (strcmp($txt,'') > 0) && !strcmp($_POST["capcha"], $_SESSION['cap']))
{
$this->addOp($id, $nm, $em, $txt);//метод добавления в //db+проверка данных
}
}
сделал тестовый пример в другую базу с одной таблицей, там все работает, здесь отказывается. я так понимаю методу send, при передаче POSTом передаются параметры для адресной строки или я ошибаюсь? Мне нужно чтобы как ajax отработает в урл было path?proId=$id&op, подскажите, если кто знает.
Последний раз редактировалось DmitryT, 30.05.2011 в 20:07.
|
|

31.05.2011, 16:01
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Подскажите пожалуйста как или в какой из функций ajax передать параметры для url.
|
|

31.05.2011, 16:54
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Параметры при методе GET передаются в xmlHttp.open(), а в send() передается null: xmlHttp.send(null);
При методе POST параметры передаются в xmlHttp.send(params)
if (post) // переменная, определяющая метод POST=true
{
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlHttp.send(params);
}
else xmlHttp.send(null);
Точно не уверен, но возможно, в Вашей строке
path?proId=$id&op.....
path - лишнее и символ $ тоже не понятно к чему.
Последний раз редактировалось Маэстро, 31.05.2011 в 16:56.
|
|

31.05.2011, 17:04
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Маэстро,
так я так и делаю как Вы написали, а то в чем Вы не уверены - это php, а не js. Имя файла и параметры передаются как php вставка.
|
|

31.05.2011, 23:15
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от DmitryT
|
так я так и делаю как Вы написали, а то в чем Вы не уверены - это php, а не js. Имя файла и параметры передаются как php вставка.
|
Понимаете, эта строка не похожа ни на PHP, ни на JS.
xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
// вот здесь видно Вашу php-вставку
Чтоб люди не гадали покажите четко, какая строка текста s формируется перед самой отправкой send(s), а не то, что у Вас написано на PHP
var s = 'proId=' + id + '&op' ........
alert(s);
xmlhttp.send(s);
|
|

07.06.2011, 08:28
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Маэстро,
вывел alert в функции Load() в блоке
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
alert(path + strParams);
}
примерно как Вы написали, выводит исходную папку проекта на сервере, index.php и заданные параметры, если alert появился, значит аджакс работает, но в урл почему-то ничего не меняется и соответственно сообщение в базу не приходит.
Последний раз редактировалось DmitryT, 07.06.2011 в 17:29.
|
|

09.06.2011, 12:08
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Я просил не вот это написать
alert(path + strParams);
сюда на форум, а результат работы этой строчки кода! т.е., то что ВЫ видите глазами - написать сюда руками ПОСИМВОЛЬНО, или сделать скриншот увиденного алерта.
т.к. я этого так и не увидел, то продолжаем гадать...
какие данные передаются в POST-запросе?
есть ли там символы коньюнкции & ?
делаете ли Вы encodeURIComponent()?
|
|

09.06.2011, 16:25
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Маэстро,
почему-то алерт срабатывает через раз или 2 раза,
/diploma/index.php?proId=38&op=1 - это содержимое алерта
?proId=38&op=1 - это строка strParams, она объявлена глабально в функции, по клику на ссылку для появление формы:
function showFormOp(id)
{
strParams = '?proId='+id+'&op=1';
var f = document.getElementById('formOp');
f.style.display = 'block';
}
|
|

09.06.2011, 16:57
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
стоп. если я правильно осмыслил суть этого непонятного кода-аякс запрос шлётся в код какой формирует эту же страницу?смущает одновременное наличие и скрипта и рнр и страница какая и отсылает и обрабатывает одновременно.... а ответ на запрос какой красивый придёт по идее 
|
|

09.06.2011, 17:11
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от dmitriymar
|
стоп. если я правильно осмыслил суть этого непонятного кода-аякс запрос шлётся в код какой формирует эту же страницу?смущает одновременное наличие и скрипта и рнр и страница какая и отсылает и обрабатывает одновременно.... а ответ на запрос какой красивый придёт по идее
|
Если Вы имели ввиду строчку
xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
то это не javascript и не PHP  это HTML.
этот HTML лежит внутри php-файла и объявляет javascript-код; но т.к. на сервере исполняется PHP-файл, то в HTML_е разрешаются PHP-вставки, которые приехав в броузер будут выглядеть как значения javascript-переменных... 
|
|
|
|