2013-12-17 4 views
0

Я хочу, чтобы вызвать функцию только тогда, когда Ajax успехаTrigger внутри успеха Ajax

моя функция Аякса

$.ajax({ 
     type: "POST", 
     url: url, 
     dataType: "json", 
     success: function(msg) { 
      console.dir(msg);  
      if(msg.status == 'OK'){ 
       $("#fb-root").on("facebook:init", function(event, response) { 
        if(response.status === 'connected') { 
         alert("LOG") 
        }else{ 
         alert(" NO LOG "); 
        } 
       }); 
      } 
     } 
    }); 

Trigger Функция

function getLoginStatus() { 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      $('#fb-root').trigger('facebook:init',[response]); 

     } else if (response.status === 'not_authorized') { 
      $('#fb-root').trigger('facebook:init',[response]); 
     } else { 
      $('#fb-root').trigger('facebook:init',[response]); 
     } 
    }); 
} 

Никогда alert("LOG") или alert("NO LOG");

, если я использую

$("#fb-root").on("facebook:init", function(event, response) { 
    if(response.status === 'connected') { 
     alert("LOG") 
    }else{ 
     alert(" NO LOG "); 
    } 
}); 

вне Аякса, это работает

Благодаря

ответ

1

Я думаю, что вам это нужно:

//Move this function outside ajax as this is to register event handler, not to trigger the function. 
    $("#fb-root").on("facebook:init", function(event, response) { 
     if(response.status === 'connected') { 
      alert("LOG") 
     }else{ 
      alert(" NO LOG "); 
     } 
    }); 

    function getLoginStatus() { 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
       $('#fb-root').trigger('facebook:init',[response]); 

      } else if (response.status === 'not_authorized') { 
       $('#fb-root').trigger('facebook:init',[response]); 
      } else { 
       $('#fb-root').trigger('facebook:init',[response]); 
      } 
     }); 
    } 

$.ajax({ 
     type: "POST", 
     url: url, 
     dataType: "json", 
     success: function(msg) { 
      console.dir(msg);  
      if(msg.status == 'OK'){ 
       getLoginStatus(); //only trigger the function when ajax is successful. 
       //or $('#fb-root').trigger('facebook:init',msg); 
      } 
     } 
    }); 

$("#fb-root").on("facebook:init" является регистрация обработчика событий, чтобы не вызвать событие. Вы всегда должны добавлять обработчик событий за пределами функции $ .ajax и запускать его, чтобы запустить внутри вашей функции успеха.

+0

Это большой код кода. Что вы изменили? Пожалуйста, не заставляйте людей играть в разницу. – Quentin

+0

@Quentin: Я добавил больше текста и комментариев в ответ. –

+0

@Barno: извините, я не могу получить доступ к вашей ссылке –

Смежные вопросы