Javascript 触发Ajax内部成功

Javascript 触发Ajax内部成功,javascript,jquery,ajax,Javascript,Jquery,Ajax,我只想在Ajax成功时触发函数 我的函数是ajax $.ajax({ type: "POST", url: url, dataType: "json", success: function(msg) { console.dir(msg); if(msg.status == 'OK'){ $("#fb-root").on("facebook:ini

我只想在Ajax成功时触发函数

我的函数是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 ");
                   }
                });
          }
        }
    });
触发函数

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]);
        }
    });
}
切勿
警报(“日志”)
警报(“无日志”)

如果我使用

$("#fb-root").on("facebook:init", function(event, response) {
    if(response.status === 'connected') {
        alert("LOG")
    }else{
        alert(" NO LOG ");
    }
});
在ajax之外,它是有效的

谢谢

我想你需要这个:

    //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”)。在(“facebook:init”
是注册事件处理程序,而不是触发事件。您应该始终在$.ajax函数之外添加事件处理程序,并在success函数内部触发它。

这是一个很大的代码块。您做了哪些更改?请不要让人们玩这个区别。@Quentin:我在答案中添加了更多的文本和注释。@Barno:对不起,我无法访问您的链接。(“facebook:init”,函数(事件,响应){if(response.status=='connected'){check(response.authResponse.userID,response.authResponse.accessToken,msg.facebook_secret,false)}上的{$(“share_facebook”).prop(“checked”,false);}}}});
@Barno:我不确定是否调用
$(“#fb root”).trigger('facebook:init',msg);
内部
成功
是您需要的。