我有一个点击功能,它有一个弹出窗口,我需要在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最后一次尝试的逻辑搞砸了。那么关于如何解决这个或一个全新的想法的任何想法?谢谢!
答案 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)。要解决这个问题,您有两种选择:
可能会立即启动弹出窗口并将其内容填充 包括某种http://ajaxload.info微调器gif
避免打开新窗口,而是将您的内容放入“模态”div中 根据需要显示和隐藏。