我的JavaScript代码中有一个ajax调用,它在服务器端代码的响应中接收GUID。在成功方法上,它使用GUID调用iframe,然后在调用完成后,它应该刷新页面。
我在fiddler中看到的是iframe会话正在中止。我唯一的猜测是,在强制刷新时它会被浏览器中止:如果删除刷新部分,iframe会话会发送请求并成功接收响应。
如何在iframe完成工作后刷新页面?有人建议我使用承诺,但我在jQuery中尝试了$.Deferred()
但仍然没有成功的。我想我没有正确使用$.Deferred()
方法。
注意:如果我将ajax设置为以同步方式调用,它会起作用,但我希望找到更好的解决方案。
以下是我在代码中的内容:
foo() {
this.$link.click((e) => {
e.preventDefault();
$.ajax({
url: "/serverEndpoint",
type: "POST",
success: (id) => {
this.iframeCall(id);
window.location.href = window.location.origin;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
});
}
iframeCall(id) {
var iframe = document.createElement('IFRAME');
iframe.setAttribute("src", someUrl+id);
iframe.style.display = 'none';
document.body.appendChild(iframe);
}
答案 0 :(得分:0)
当调度iframeCall()
元素load
事件时,您可以从iframe
返回jQuery延迟对象,然后执行任务
iframeCall(id) {
return new $.Deferred(function(dfd) {
var iframe = document.createElement('IFRAME');
iframe.onload = dfd.resolve;
iframe.setAttribute("src", someUrl+id);
iframe.style.display = 'none';
document.body.appendChild(iframe);
})
}
this.iframeCall(id).then(function() {
window.location.href = window.location.origin;
})