Кирилл М.
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