要添加到列表中的另一个Internet Explorer问题...我的页面上有一个关闭当前标签/窗口的按钮,但在此之前它会执行一个AJAX请求以删除文档会话&#39 ;。非常简单的东西:
MN.ajax({
url: url,
dataType: "JSON",
errorText: 'There was a problem deleting the session, please retry later',
success: function(data){
// Close the tab/window
window.open(window.location, '_self').close();
}
});
忽略MN.ajax()
,这只是$.ajax()
的包装函数,它的工作方式相同,但有一些额外的位,例如' errorText'
上述代码适用于除IE之外的每个浏览器。在IE中,它在实际执行AJAX请求之前关闭窗口/选项卡。 AJAX请求应删除我的数据库中的记录,但除非我注释掉window.open(window.location, '_self').close();
行
我没有对此进行过测试,但我认为如果我用setTimeout
包装关闭窗口那么它应该可以工作。但是,我想知道的是为什么!!?为什么它会成功地实现“成功”。在AJAX请求实际完成之前的函数?
我尝试过的另一件事就是关闭'关闭窗口'将代码转换为complete
回调而不是success
回调,但这绝对没有区别......
这是完整的包含功能:
/**
* Close the Document
*/
MN.closeDocument = closeDocument;
function closeDocument(document_reference,session_id){
// Show the loading dialog
MN.loadingDialog('Closing Document...',function(){
// Execute the autosave function to save the session
MN('#document-modify-form').autosave('save',function(){
MN.ajax({
url: '//api.example.net/document/session/'+document_reference+'/',
dataType: "JSON",
errorText: 'There was a problem getting the documents session',
success: function(data){
// Only close if there are no changes
switch(data.status){
// There is no session or no changes
case 'no_session':
case 'no_changes':
// Delete the session
MN.ajax({
url: '//api.example.net/document/delete-session/'+document_reference+'/',
dataType: "JSON",
errorText: 'There was a problem deleting the session, please retry later',
success: function(data){
// Close the tab/window
window.open(window.location, '_self').close();
},
error: function(msg){
// Error code here
}
});
break;
// Other cases here
}
},
error: function(msg){
// Error code here
}
});
});
});
}
答案 0 :(得分:0)
我已经从您的代码构建了以下简化的测试页面。这可以在我的系统(Win8.1 x64,IE11)上正常工作:窗口在3秒后关闭,当ajax调用完成时。
<强> ajax.php: 强>
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
sleep(3);
?>
<!DOCTYPE html>
<html>
<head>
<title>ajax test</title>
<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
<script type="text/javascript">
function test_click()
{
$.ajax({
url: 'ajax.php',
success: function(data)
{
// Close the tab/window
window.open(window.location, '_self').close();
}
});
}
</script>
</head>
<body>
<a href="#" onclick="test_click()">Close</a>
</body>
</html>
答案 1 :(得分:0)
经过大量测试后,我发现了问题所在。 $.ajax
的功能在成功回调中调用window.open(window.location, '_self').close();
绝对没有错。这有效!
我试图删除的文档会话实际上已被删除,但由于窗口正在重新打开然后由window.open(window.location, '_self').close();
关闭,会话正在重新创建!所以似乎会话永远不会被删除。
这意味着我的问题有两个解决方案,不要使用window.location
,因为这会重新打开相同的页面,从而重新创建会话,或者找到另一种方法来使用javascript关闭选项卡/窗口。
感谢您的帮助,抱歉浪费您的时间! : - )