【问题标题】:How can I make an AJAX request and then remove the iframe the request was made from?如何发出 AJAX 请求,然后删除发出请求的 iframe?
【发布时间】:2013-06-07 01:34:36
【问题描述】:

背景:

在我的页面上有一个上传文件的选项,这会打开一个 iframe,其中包含用于上传文件的表单。如果用户决定取消上传,我想确保所有上传的文件都被删除。因此,我对运行一个函数以删除任何已上传的临时文件的 jsp 进行 ajax 调用。在进行 ajax 调用后,我从屏幕上删除了 iframe,以便用户可以继续他们的工作。删除文件的 jsp 不会返回任何内容,我也不需要让用户知道临时文件已被删除。

我发现这在 IE 中运行良好,但在 chrome 和 safari 中向用户显示了一个错误,经过一段时间的调试后我发现错误的原因是 ajax 调用在 iframe 被删除和 chrome 后返回并且 safari 不喜欢将 ajax 调用返回到已删除的 iframe。所以一种解决方案是使 ajax 调用同步。另一种解决方案是让 jsp 产生一个线程来管理删除。

问题:

我想知道是否有某种方法可以修改 ajax 调用,使其返回到与被删除页面不同的页面?

function cancelAndDelete()
{
    $.ajax({url:"removeTempFiles.jsp", data: {id: fileId}, async: true});
    $("#iframe").remove();
}

像 $(window.opener).ajax() 这样的东西似乎不起作用,但这就是我想要的想法。

【问题讨论】:

  • 让 iframe 中的内容移除 iframe。 window.parent.$("#iframe").remove()
  • 这似乎没什么区别。

标签: jquery ajax


【解决方案1】:
function cancelAndDelete()
{
    $.ajax({url:"removeTempFiles.jsp", data: {id: fileId}, async: true}, complete: window.location.replace("http://URL HERE.com"));
    $("#iframe").remove();
}

这是你想要做的吗?

【讨论】:

  • window.location.replace 会过早执行
  • 是的,你必须将它包装在一个匿名函数中
  • 听起来不像是我想要的。页面不需要重新加载,我只需要页面上弹出的 iframe 即可消失,这就是 .remove() 正在做的事情。只是做得太早了。
猜你喜欢
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 2019-02-25
  • 2017-12-06
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2020-11-07
相关资源
最近更新 更多