Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Объясните пожалуйста ньюанс в использованни AJAX
Форумы портала PHP.SU » » Вопросы новичков » Объясните пожалуйста ньюанс в использованни AJAX

Страниц (1): [1]
 

1. teddy - 29 Июля, 2013 - 01:46:06 - перейти к сообщению
Здравствуйте. Не понимаю как работает скрипт, который описан ниже. После скрипта опишу то, что именно мне не понятно.

Клиент:
Спойлер (Отобразить)


Сервер:
Спойлер (Отобразить)

Как вы заметили, я отправляю AJAX запрос для обработки данных на сервере методом POST. Но как получается, что в то же время срабатывает GET и я получаю результат обработки данных сервером? Я же не писал в req.send что хочу получить данные и не указывал метод GET. Как получается, что данные все равно послушно выводятся в виде результата? Тоесть выводится не только ответ сервера по обработке того запроса, что я посылаю методом POST, но ещё и другой текст(Hello world), который выводится в серверном файле? Вот это не понимаю. Просьба помочь мне разобраться
2. DelphinPRO - 29 Июля, 2013 - 09:04:10 - перейти к сообщению
что тут непонятного?
ответ сервера ты выводишь на страницу? выводишь:
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById("result").innerHTML = req.responseText;

Сервер тебе отвечает? отвечает:
PHP:
скопировать код в буфер обмена
  1. echo $a + $b."<br />";
  2. echo "Hello, world!";


что сервер отправил, то ты и получил в ответе. Это основной принцип работы сети запрос-ответ. И неважно, аяксом ты делаешь запрос или как-то иначе.
3. EuGen - 29 Июля, 2013 - 09:09:47 - перейти к сообщению
teddy
Возможно, недопонимание состоит из-за использования метода POST. Строго говоря, технически, POST - суть тот же GET. А, согласно HTTP, сервер отвечает на любой запрос клиента (вдобавок Вы выводите ответ в документ, как указали в комментарии выше)
4. teddy - 29 Июля, 2013 - 12:15:26 - перейти к сообщению
DelphinPRO пишет:
Сервер тебе отвечает? отвечает:

Отвечать так отвечает, но вот не было понятно, почему именно...

По поводу основного принципа: если допустим мы что то добавляем в БД(другая тема) и выводим, то нам нужен селект и инсерт. А не один инсерт который отдаст нам и селект автоматически, ведь так? Поэтому было не очень понятно )

EuGen
EuGen пишет:
Возможно, недопонимание состоит из-за использования метода POST.

Вы верно заметили, я даже намекнул на это в начале темы. Я просто думал что если не написать именно GET, сервер ничего не ответит а только обработает то, что ему прислали, например уложит данные в базу. Спасибо
5. DelphinPRO - 29 Июля, 2013 - 12:29:39 - перейти к сообщению
понятно, что вам было не понятно Улыбка
но
teddy пишет:
Я просто думал что если не написать именно GET, сервер ничего не ответит а только обработает то, что ему прислали, например уложит данные в базу
неужели вы ни разу не пробовали просто отправить форму методом POST? Вам же возвращается результат, если вы делаете echo. т.е.

CODE (htmlphp):
скопировать код в буфер обмена
  1. <? if (isset($_POST['submit'])) echo 'Form submitted.'; ?>
  2. <form action="" method="post">
  3.   <input type="submit" name="submit" value="submit">
  4. </form>


ну да ладно, если все понятно, я удаляюсь Улыбка
6. teddy - 29 Июля, 2013 - 12:35:27 - перейти к сообщению
DelphinPRO
Точно ) я просто аякс начал изучать на днях, он показался мне каким то особенным ) Да и когда изучал его, в материалах явно было указано POST что бы отправить данные, а GET что бы забрать. Из за этого я думал что придется писать POST запрос отдельно, а GET отдельно...

А тут вдруг я пишу POST, а данные почему то летят обратно.. Вот в чем была проблема ) Я просто не до конца понимал почему именно он работает )) Ну теперь уже вопросов нет ) Благодарю за внимание! в ближайшее время изменю вашу карму Язычок ))
7. Zuldek - 29 Июля, 2013 - 12:49:30 - перейти к сообщению
Цитата:
что в то же время срабатывает GET и я получаю результат обработки данных сервером?

Где он срабатывает?
Формат ответа сервера на POST и GET аналогичен.
Вывод
Цитата:
Hello, world!
совершенно не означает факт использования $_GET-запроса. Читать описание протокола HTTP.
8. DeepVarvar - 29 Июля, 2013 - 15:43:28 - перейти к сообщению
http://forum.php.su/topic.php?fo...70214#1374370214
9. EuGen - 29 Июля, 2013 - 16:00:50 - перейти к сообщению
DeepVarvar
Чисто теоретически - это почти всегда так. На практике же, увы, существуют ограничения для передачи данных методом GET, связанных, разумеется, с устройством самих браузеров, а так же максимальной длиной QUERY_STRING для веб-сервера. Поэтому, в случае, если параметров много и значения их достаточно длинные (всевозможные фильтры, как вариант) - то могут возникнуть сложности, и в таком случае используют все-таки POST + перенаправление. Это, правда, скорее исключение, так как на практике такое встречается редко.
Исходя чисто из дизайна запроса - POST должен что-либо изменять, GET - получать, в силу стандарта HTTP на деле POST изменяет + возвращает (не имеется ввиду возвращает изменённое, я про ответ HTTP в целом). Так что верно и обратное - не следует использовать GET для изменения данных (например, "action=delete&id=100") - опять же, "не следует" - в теории, исходя из здравого смысла (но это не значит, что технически это вызовет какие-либо трудности)

 

Powered by ExBB FM 1.0 RC1