Авторизация:

В чём ошибка скрипта (AJAX+PHP)

Создать тему  |  Поиск

Найти сообщения:  За сутки  |  Без ответов
Автор Сообщение
Ссылка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>, но ничего путного не помню
Ссылка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 запрос.
Ссылка10.05.2008 в 07:27
Посмотрите лог веб-сервера, происходит ли вообще вызов add.php методом POST.
Если не происходит, значит ищите опечатку или ошибку в JS коде. Если ошибка в JS, то того, кода что Вы привели, мало для анализа, чтобы определить проблему.
Ссылка10.05.2008 в 11:58
Цитата:
<body onload = "myfunction()">;


Хм... думал так сделать, но чёт вообще тогда переставал работать с крипт Ладно, сейчас порпбую по новой...

Спасибо всем за советы!
Ссылка10.05.2008 в 14:18
Цитата:
Как сделать, что бы AJAX-функция автоматически запускала себя каждые 5 секунд (к примеру)? Думал что-то поставить в <body>, но ничего путного не помню


почитай про setInterval и setTimeout
Ссылка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");
.

Если ошибок другого рода не присутствует, отработает все на ура.

Успехов!
Ссылка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);

без этого может и неотрабатывать


только смайлики замените.. там код.. просто совпал с кодом смайла.
Ссылка11.05.2008 в 15:36
Вообще советую на практике Prototype юзать для таких вещей, много сил сэкономишь

ЗЫ Камням не кидаться, сам знаю, что надо понимать как оно работает, но время - деньги
Ссылка11.05.2008 в 22:43
Tchokurov, хм.... как-то хотел попробовать прототип, но всё времени не находил... надо будет попробовать Спасибо!
Ссылка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