| Автор |
Сообщение |
Сообщения: 135
Страна: Беларусь |
 10.05.2008 в 02:02
Здравствуйте! Наконец-то решил взяться за изучение 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>, но ничего путного не помню 
|
Сообщения: 1237
Страна: Украина |
 10.05.2008 в 02:40 [Отредактировано: 10.05.2008 в 02:45]
Цитата: То есть по нажатию он отправляет РНР-файлу параметры, но РНР-файл ВООБЩЕ ничего не получает В чём может быть проблема?
ЗЫ. XMLHttpRequest содаётся (ну ActiveXObject, в зависимости от браузера)
Тут может быть два варианта:
1) ошибка в JS сценарии. Проверяется элементарным заглядыванием в Javascript консоль или Firebug.
2) на сервере не правильно принимаются данные. Допустим указан метод передачи post, а Вы пытаетесь получить их через $_GET. Или элементарная ошибка в PHP-коде. В таких случаях советую включать отображение всех ошибок, а в js скрипте получать responseText и отображать его в какой-то дивчик с id допустим debug. Тогда если происходит ошибка на серверной части - она отобразиться в этом диве при обработке запроса.
Цитата: И еще один вопрос, что бы не создавать лишнию тему:
Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню
<body onload = "myfunction()">;
В функции делаем обычный цикл с таймером и запускаем по нему ajax запрос.
|
Сообщения: 1671
Страна: Украина |
 10.05.2008 в 07:27
Посмотрите лог веб-сервера, происходит ли вообще вызов add.php методом POST.
Если не происходит, значит ищите опечатку или ошибку в JS коде. Если ошибка в JS, то того, кода что Вы привели, мало для анализа, чтобы определить проблему.
|
Сообщения: 135
Страна: Беларусь |
 10.05.2008 в 11:58
Цитата: <body onload = "myfunction()">;
Хм... думал так сделать, но чёт вообще тогда переставал работать с крипт  Ладно, сейчас порпбую по новой...
Спасибо всем за советы!
|
Сообщения: 39
Страна: Украина |
 10.05.2008 в 14:18
Цитата: Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню
почитай про setInterval и setTimeout
|
Сообщения: 1
Страна: Россия |
 10.05.2008 в 14:35
Цитата (DEM90): Здравствуйте! Наконец-то решил взяться за изучение AJAX и столкнулся с первой трудностью
То есть по нажатию он отправляет РНР-файлу параметры, но РНР-файл ВООБЩЕ ничего не получает  В чём может быть проблема?
ЗЫ. XMLHttpRequest содаётся (ну ActiveXObject, в зависимости от браузера)
Если вы используете метод POST, то при посылке данных вы должны посылать заголовок Content-Type: application/x-www-form-urlencoded,
т.е. в вашем случае перед вызовом .send:
Код: request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); .
Если ошибок другого рода не присутствует, отработает все на ура.
Успехов!
|
Сообщения: 103
Страна: Украина |
 10.05.2008 в 17:23 [Отредактировано: 10.05.2008 в 17:23]
Еще может быть проблема и в самом 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);
без этого может и неотрабатывать
только смайлики замените.. там код.. просто совпал с кодом смайла.
|
Сообщения: 243
Страна: Украина |
 11.05.2008 в 15:36
Вообще советую на практике Prototype юзать для таких вещей, много сил сэкономишь
ЗЫ Камням не кидаться, сам знаю, что надо понимать как оно работает, но время - деньги 
|
Сообщения: 135
Страна: Беларусь |
 11.05.2008 в 22:43
Tchokurov, хм.... как-то хотел попробовать прототип, но всё времени не находил... надо будет попробовать  Спасибо!
|
Сообщения: 47
Страна: Россия |
 12.05.2008 в 20:15
Код:
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
|