Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вынести ответ ajax за пределы callback функции (https://javascript.ru/forum/jquery/6288-vynesti-otvet-ajax-za-predely-callback-funkcii.html)

mikel 22.11.2009 11:58

Вынести ответ ajax за пределы callback функции
 
Вот разбираюсь с ajax. Хочется произвести ajax-запрос, а результат его выполнения запихнуть в переменную и дальше с ней манипулировать. Но все примеры, которые мне удалось нагуглить, позволяют работать с ответом ajax либо в callback функции, либо cразу загрузить ответ в какой-нибудь html элемент. Пытался сделать как в коде ниже, но t.responseText возращается пустым, а t.status = 1. Видимо, запрос еще не успевает завершиться, когда я пытаюсь прочесть его ответ.
Заранее спасибо за помощь.

get.php
echo "Привет!";


js-код
...........................
				var t;			
				t =  $.post("get.php",
						   { name: "John", time: "2pm" },
						   function(data)
							     {						    					    
							    return data;
							    },
							    "text"
						    );

                             alert(t.responseText);
................................

Octane 22.11.2009 14:21

Callback-функция не просто так передается 3-м параметром в метод post.

mikel 22.11.2009 14:30

То есть сделать что-нибудь с ответом за пределами callback функции нельзя?

Octane 22.11.2009 14:55

В случае с асинхронным запросом нельзя, остальной код не будет ждать, когда придет ответ с сервера, продолжит выполнятся, а когда ответ все таки придет, будет вызвана callback-функция.

mikel 23.11.2009 22:56

Вынес ajax запрос в самый конец функции, но тут возникает другой вопрос: можно ли сделать так, чтобы return для callback функции стал бы и return для обрамляющей его функции myfunction.Или можно все-таки поставить какой-нибудь таймаут, чтобы произвести нужные действия после завершения запроса за пределами Callback функции.

function myfunction 
      {
      $.post("get.php",
                           { name: "John", time: "2pm" },
                           function(data)
                                {                                                    
                                ..............................
                                ..............................
                                      if (iserror)
                                         {
                                         return false;
                                         }
                                         else
                                         {
                                         return true;
                                         }
                                },
                                "text"
                            );
      }


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