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

时间:2011-07-18 20:37:03

标签: javascript jquery popup

我有一个点击功能,它有一个弹出窗口,我需要在ajax调用成功后打开。我试过设置async:false。我尝试将弹出窗口放在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最后一次尝试的逻辑搞砸了。那么关于如何解决这个或一个全新的想法的任何想法?谢谢!

4 个答案:

答案 0 :(得分:2)

打开ajax调用的success:函数中的弹出窗口。这是您唯一知道ajax调用已完全成功并且您可以访问从ajax调用返回的数据的地方。

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

答案 1 :(得分:0)

使用您可以在success的{​​{1}}中拨打的回叫。然后在回调中打开弹出窗口。

$.ajax()

答案 2 :(得分:0)

你过分复杂了:

$('#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 popup相同。最初,为该div提供CSS #popup { display:none; position:relative; z-index:99999; /* etc...*/ }然后在您的点击事件中,您只需show()fadeIn()该div。

示例,请查看Colorbox - 在演示页面上,点击“外部网页(iframe)”链接

答案 3 :(得分:0)

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

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

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