Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Действие после выполнение Ajax запроса (https://javascript.ru/forum/jquery/52525-dejjstvie-posle-vypolnenie-ajax-zaprosa.html)

paveltkachev 23.12.2014 10:52

Действие после выполнение Ajax запроса
 
Я с помощью Ajax отправляю данные php скрипту и последний после обработки данных даёт ответ. Необходимо, чтобы страница ждала ответа и в зависимости от него производились действия. Подскажите, как этого добиться?

У jQuery.ajax() есть два на мой взгляд подходящих кандидата: complete и success. Чтение документации мне не помогло понять, какой их них будет ждать ответа от скрипта, а какой запустится сразу после корректной отправки запроса. Правильно ли я понял, что именно этим они отличаются?

danik.js 23.12.2014 11:05

success будет вызван только при успешном запросе. А complete - при любом исходе. Допустим у юзера во время запроса отвалится интернет-соединение. Или твой сервер из-за косяка твоего хостера уйдет в аут. При таких обстоятельствах будет вызван error колбэк, а затем - complete.

paveltkachev 23.12.2014 14:16

Запрос ушёл, а как узнать что ответ пришёл? Предположим, что скрипту надо 30 секунд и потом он выдаёт результат. Пинговать каждую секунду что-ли?

paveltkachev 23.12.2014 16:08

А этот курительный callback сам как работает? Пингует?

danik.js 23.12.2014 17:22

Цитата:

Сообщение от paveltkachev
Пингует?

HTTP протокол работает по схеме запрос-ответ. Так что не нужно ничего пинговать. Отправили запрос - получили ответ. Для $.ajax это complete/success/error либо промисы (Deferred).

paveltkachev 23.12.2014 18:20

Возникли ещё вопроса по Ajax.

Читал рекомендации использовать метод пересылки GET, так как он работает быстрее.
Насколько быстрее?
Какой максимальный объём данных может быть передан?
Если передаются русские буквы, то они кодируются 4 байтами?

MallSerg 23.12.2014 18:36

Цитата:

Сообщение от paveltkachev
пересылки GET, так как он работает быстрее.

буквально моментальный т.к. стандарт рекомендует брать данные из кэша браузера а не отправлять запрос на сервер.

paveltkachev 24.12.2014 11:15

Цитата:

Сообщение от MallSerg (Сообщение 347921)
буквально моментальный т.к. стандарт рекомендует брать данные из кэша браузера а не отправлять запрос на сервер.

А какой объём данных можно передавать? До IE 9, я слышал можно было только несколько килобайт.

paveltkachev 24.12.2014 11:21

Max URI length in IE8 is 32KB. In IE9+ JavaScript files are supported too and the maximum size limit set to 4GB.

Остальные браузеры тоже до 4 GB принять могут?

А зачем вообще тогда нужен метод POST, если он тормозной?

MallSerg 24.12.2014 13:01

Цитата:

Сообщение от paveltkachev
А зачем вообще тогда нужен метод POST, если он тормозной?

бред сивой кобылы (сори за прямоту)

paveltkachev 24.12.2014 13:21

Цитата:

Сообщение от MallSerg
бред сивой кобылы (сори за прямоту)

Есть метод GET, которым я могу передать до 4Gb данных с помощью Ajax быстрее, чем с помощью POST. Какие есть преимущества у Post, чтобы пользоваться им для передачи?

danik.js 24.12.2014 13:55

Цитата:

Сообщение от paveltkachev
Есть метод GET, которым я могу передать до 4Gb данных с помощью Ajax быстрее, чем с помощью POST

С чего ты взял что быстрее? Я даже считаю что это будет работать медленней. Тем более для передачи через URL данные нужно url'энкодить(т.о. увеличивать размер и тормоза). А тело POST'а кодировать не нужно

paveltkachev 24.12.2014 14:35

Мне ранее в этой теме сказали: «буквально моментальный т.к. стандарт рекомендует брать данные из кэша браузера а не отправлять запрос на сервер.» Потому я и стал спрашивать.

А как лучше передавать без увеличения и тормозов?

Я сейчас собираю данные из формы с помощью serialize и передаю через POST. Но serialize всё равно кодирует некоторые символы. Есть ли способ лучше?

tsigel 24.12.2014 14:49

paveltkachev,
У пост запроса помимо параметров (которые аналагичны параметрам гет запроса) есть ещё тело. Почитайте, его не надо кодировать.

paveltkachev 24.12.2014 14:54

Это я понял. Как будет передаваться быстрее: сериализация и всё через один POST или через множество без сериализации?

tsigel 24.12.2014 15:03

на мой взгляд (честно говоря никогда не тестировал скорость запросов) это экономия на спичках. Скорости запросов должны быть примерно равны и упираться в скорость соединения с сервером. Все остальное +- 10 мс (максимум)

tsigel 24.12.2014 15:07

paveltkachev,
Зачем вы все время это спрашиваете? Чем спрашивать провели бы пару тестов. Напишите запросы которые передают текущее время и кучу данных, на сервере принимаете и сравниваете дифф времени (понятное дело что на клиенте и сервере время может отличаться так что цифры эти примерные). Так запросов 100, и то же самое для второго типа. Где среднее арифметическое меньше - там и быстрее

tsigel 24.12.2014 15:08

Не думаю что кто-то выбирает между гет и пост запросом исходя из скорости. Пост запрос нуже для повышения безопасности прежде всего.

danik.js 24.12.2014 17:20

Цитата:

Сообщение от paveltkachev
брать данные из кэша браузера

Так тебе отправить надо данные или получить?

Safort 24.12.2014 22:44

ТС, инфа 100%, что тебе вряд ли понадобится учитывать разницу в скорости или ещё чём-то. И вряд ли у тебя будут пересылаться данные размером ~4гига. Просто, у тебя болезнь преждевременной оптимизации, я прав?)

Safort 24.12.2014 23:12

danik.js,
Цитата:

либо промисы (Deferred)
Промисы или Deferred
fix

melky 24.12.2014 23:15

Цитата:

Сообщение от Safort
Промисы или Deferred

v0.0.2

Safort 25.12.2014 01:56

melky,
ась? :)

melky 25.12.2014 06:33

Цитата:

Сообщение от Safort (Сообщение 348216)
melky,
ась? :)

раньше, когда не было промисов, были только deferred.
когда промисы появлялись, были дикие срачи по поводу того, лучше ли это , чем деферед, и зачем оно вообще нужно.
но потом А+ промисы утвердили как стандарт и лалки соснули)

с того времени у меня в голове алиас : деферед - плохо, промис - хорошо)

конкретно к этой теме не сильно относится , конечно, так что мой пост - оффтоп :)


Часовой пояс GMT +3, время: 13:01.