В чём ошибка скрипта (AJAX+PHP)
128 сообщений
#17 лет назад
Здравствуйте! Наконец-то решил взяться за изучение AJAX и столкнулся с первой трудностью 
У меня есть функция AJAX на кнопке:
function add_mess() {
var mess = document.getElementById("text").value;
var user = document.getElementById("user").value;
document.getElementById("text").value = "";
var url = "add.php";
request.open("POST", url, true);
request.onreadystatechange = updatePage;
request.send("mess=" + escape(mess) +
"&user=" + escape(user) +
"&type=add");
}
То есть по нажатию он отправляет РНР-файлу параметры, но РНР-файл ВООБЩЕ ничего не получает

ЗЫ. XMLHttpRequest содаётся (ну ActiveXObject, в зависимости от браузера)
И еще один вопрос, что бы не создавать лишнию тему:
Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню

1410 сообщений
#17 лет назад
Цитата:То есть по нажатию он отправляет РНР-файлу параметры, но РНР-файл ВООБЩЕ ничего не получает В чём может быть проблема?
ЗЫ. XMLHttpRequest содаётся (ну ActiveXObject, в зависимости от браузера)
Тут может быть два варианта:
1) ошибка в JS сценарии. Проверяется элементарным заглядыванием в Javascript консоль или Firebug.
2) на сервере не правильно принимаются данные. Допустим указан метод передачи post, а Вы пытаетесь получить их через $_GET. Или элементарная ошибка в PHP-коде. В таких случаях советую включать отображение всех ошибок, а в js скрипте получать responseText и отображать его в какой-то дивчик с id допустим debug. Тогда если происходит ошибка на серверной части - она отобразиться в этом диве при обработке запроса.
Цитата:
И еще один вопрос, что бы не создавать лишнию тему:
Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню
<body onload = "myfunction()">;
В функции делаем обычный цикл с таймером и запускаем по нему ajax запрос.
3240 сообщений
#17 лет назад
Посмотрите лог веб-сервера, происходит ли вообще вызов add.php методом POST.Если не происходит, значит ищите опечатку или ошибку в JS коде. Если ошибка в JS, то того, кода что Вы привели, мало для анализа, чтобы определить проблему.
128 сообщений
#17 лет назад
Цитата:<body onload = "myfunction()">;
Хм... думал так сделать, но чёт вообще тогда переставал работать с крипт

Спасибо всем за советы!
57 сообщений
#17 лет назад
Цитата:Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню
почитай про setInterval и setTimeout
1 сообщение
#17 лет назад
Цитата ("DEM90"):Здравствуйте! Наконец-то решил взяться за изучение AJAX и столкнулся с первой трудностью
То есть по нажатию он отправляет РНР-файлу параметры, но РНР-файл ВООБЩЕ ничего не получаетВ чём может быть проблема?
ЗЫ. XMLHttpRequest содаётся (ну ActiveXObject, в зависимости от браузера)
Если вы используете метод POST, то при посылке данных вы должны посылать заголовок Content-Type: application/x-www-form-urlencoded,
т.е. в вашем случае перед вызовом .send:
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");.
Если ошибок другого рода не присутствует, отработает все на ура.
Успехов!
130 сообщений
#17 лет назад
Еще может быть проблема и в самом PHP файле.в самое начало вставьте этот код:
header("Content-type: text/plain; charset=utf-8"

header("Cache-Control: no-store, no-cache, must-revalidate"

header("Cache-Control: post-check=0, pre-check=0", false);
без этого может и неотрабатывать
только смайлики замените.. там код.. просто совпал с кодом смайла.
292 сообщения
#17 лет назад
Вообще советую на практике Prototype юзать для таких вещей, много сил сэкономишь 
ЗЫ Камням не кидаться, сам знаю, что надо понимать как оно работает, но время - деньги

128 сообщений
#17 лет назад
Tchokurov, хм.... как-то хотел попробовать прототип, но всё времени не находил... надо будет попробовать 
49 сообщений
#17 лет назад
header("Content-type: text/plain; charset=utf-8";
header("Cache-Control: no-store, no-cache, must-revalidate";
header("Cache-Control: post-check=0, pre-check=0", false);
Эти хидеры лишь говорят браузеру, что не надо кэшировать ответ. И никак serverside (PHP) не влияет на clientside (JS)
dormice прав, надо отправлять Content-Type
Tchokurov Как мне кажется, лучше использовать фреймворки только тогда, когда знаешь, как это делается на голом JS, потому как, если встретится неочевидный подводный камень, то его будет трудно отыскать без знаний. А так будет иметься опыт

Packt Publishing "Ajax and PHP building responsive Web applications" - советую эту книгу пролистать, как называется по-русски не знаю, за час-два можно понять большую часть особенностей AJAX