Как создать jquery ajax как отдельную функцию? - PullRequest
0 голосов
/ 05 ноября 2011

Я хочу создать отдельную функцию для получения конкретных данных из графа Facebook JSON.Например, у меня есть load () и вызвана функция getNextFeed ().

getNextFeed работает правильно.За исключением того, что возвращаемое значение aString не является успешным.Когда я выскакиваю оповещение (thisUrl).Это сказал неопределенный.

Примечание: я новичок в Javascript и Jquery.Пожалуйста, дайте мне больше информации, где я ошибся.Спасибо.

    function load()
    {

         $(document).ready(function() {
         var token = "AccessToken";
         var url = "https://graph.facebook.com/me/home?access_token=" + token;      
          var thisUrl = getNextFeed(url);
         alert(thisUrl); // return undefined
    });




    function getNextFeed(aUrl)
    {   
          $.ajax({
           type: "POST",
           url: aUrl,
           dataType: "jsonp",
           success: function(msg) {
           alert(msg.paging.next); // return correctly

            var aString = msg.paging.next;
            alert(aString); // return correctly
            return aString;

           }
        });
     }

1 Ответ

0 голосов
/ 05 ноября 2011

Проблема в том, что $ .ajax () - это асинхронная функция, то есть при вызове она возвращается в том же экземпляре, но вызов ajax выполняется в отдельном потоке.Таким образом, ваша возвращаемая переменная $ .ajax () всегда не определена.

Вы должны использовать функцию обратного вызова ajax, чтобы делать все, что вам нужно: в принципе, вы уже сделали это правильно, просто возвращение aString не возвращаетк вашей первоначальной функции вызывающего абонента.Поэтому вы можете вызвать функцию внутри функции обратного вызова (success ()) или реализовать логику непосредственно в функции success ().

Пример:

function load()
    {

         $(document).ready(function() {
         var token = "AccessToken";
         var url = "https://graph.facebook.com/me/home?access_token=" + token;      
         getNextFeed(url);
         alert('Please wait, loading...');
    });




    function getNextFeed(aUrl)
    {   
          $.ajax({
           type: "POST",
           url: aUrl,
           dataType: "jsonp",
           success: function(msg) {
           alert(msg.paging.next); // return correctly

            var aString = msg.paging.next;
            alert(aString); // return correctly
            do_something_with(aString);

           }
        });
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...