繁体   English   中英

继续运行脚本一次 jquery ajax 调用成功

[英]Continue running script once jquery ajax call is successful

我有一个点击 function 有一个弹出 window ,一旦 ajax 调用成功,我需要打开它。 我试过设置异步:假。 我尝试将弹出窗口放在 ajax 调用中,但这会使弹出窗口被浏览器阻止。 我最后一次尝试是设置一个超时,直到 ajax 调用完成并且每个都没有运气。 有什么建议么???

var currentStatus = "false";
var success = "false";

function waitForSuccess(){
    if (success == "false"){
        var t = setTimeout("waitForSuccess()", 300);
    }
    else{
        stopTimer(t);
        return "true";
    }
}
function stopTimer(t){
    clearTimeout(t);
}

 function checkReps(clicked){
$.ajax({
            cache: false,
            url: "chat_new_files/chat_new.php",
            success: function(data){
                       success = "true";
                    }
      });

$('#chatT').live('click', function (event) {
         success = "false";
             checkReps("true");
         var changed = waitForSuccess();
        if(changed == "true"){
                  BG.startChatWithIssueId('0', true);    //THIS IS THE POPUP
        }
});

我认为我对 setTimeout 的最后一次尝试的逻辑搞砸了。 那么关于如何解决这个问题或一个全新的想法有什么想法吗? 谢谢!

success: function 为 ajax 调用。 这是你们都知道 ajax 调用完全成功并且您可以访问从 ajax 调用返回的数据的唯一地方。

不要使用计时器来猜测 ajax function 何时完成。

使用可以success调用的回调$.ajax() 然后在回调中打开你的弹出窗口 window。

 function checkReps(clicked){
      $.ajax({
            cache: false,
            url: "chat_new_files/chat_new.php",
            success: function(data){
                       success = "true";
                       openPopup();
                    }
      });

你把事情复杂化了:

$('#chatT').live('click',function(){
    $.ajax({
        cache: false,
        url: "chat_new_files/chat_new.php",
        success: function(data){
            BG.startChatWithIssueId('0', true);
        }
    });
});

至于浏览器弹出窗口拦截器问题,一个简单的解决方法是创建一个 div 作为弹出容器,例如<div id="popup"></div> 在该 div 中,您可以添加一个 iframe ,其中 url 与您的 oldskool 弹出窗口相同。 最初,给那个 div CSS #popup { display:none; position:relative; z-index:99999; /* etc...*/ } #popup { display:none; position:relative; z-index:99999; /* etc...*/ } #popup { display:none; position:relative; z-index:99999; /* etc...*/ }然后在您的点击事件中,您只需show()fadeIn()那个 div。

例如,查看Colorbox - 在演示页面上,单击“外部网页(Iframe)”链接

浏览器倾向于阻止不是来自事件处理程序的弹出窗口,因为这些弹出窗口往往不是用户启动的(duh)。 为了解决这个问题,您有 2 个选择:

  1. 立即启动弹出窗口并将其内容填充,可能包括某种http://ajaxload.info spinner gif

  2. 避免打开新的 window,而是将您的内容放在您根据需要显示和隐藏的“模态”div 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM