[英]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 个选择:
立即启动弹出窗口并将其内容填充,可能包括某种http://ajaxload.info spinner gif
避免打开新的 window,而是将您的内容放在您根据需要显示和隐藏的“模态”div 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.