Javascript 如何从父文档捕获iframe内部的刷新?

Javascript 如何从父文档捕获iframe内部的刷新?,javascript,jquery,html,ajax,iframe,Javascript,Jquery,Html,Ajax,Iframe,情况是这样的: 我们有一个文件上传页面。我们不想在上传完成后重新加载页面,所以我们将表单放在iframe中。iframe内部的表单向自身发送消息,并在完成后返回json。我们如何捕捉到这种反应?上传完成后,iframe将重新加载,换句话说,我们如何捕获iframe何时重新加载 假设: 我们不能打印/返回除json对象之外的任何内容(因此没有js代码来调用父文档中的函数) 我们不能使用ajax,因为您不能使用ajax发布文件 我们不能在iframe内部追加javascript代码,因为一旦提交了

情况是这样的: 我们有一个文件上传页面。我们不想在上传完成后重新加载页面,所以我们将表单放在iframe中。iframe内部的表单向自身发送消息,并在完成后返回json。我们如何捕捉到这种反应?上传完成后,iframe将重新加载,换句话说,我们如何捕获iframe何时重新加载

假设:

  • 我们不能打印/返回除json对象之外的任何内容(因此没有js代码来调用父文档中的函数)
  • 我们不能使用ajax,因为您不能使用ajax发布文件
  • 我们不能在iframe内部追加javascript代码,因为一旦提交了iframe内部的表单,页面就会被重新加载,我们就会丢失追加的js代码
有什么想法吗

更新-解决方案似乎非常简单(在网上的某个地方找到):



这样,每当重新加载iframe中的页面时,它就会触发警报。现在只需要区分JSON对象和HTML代码,这非常简单。谢谢大家的建议

您可以通过对iFrame文档的内部文本执行定时检查来检查iFrame的内容是否已更改,检查内容是否与上次检查的内容一致(如果文档较大,则检查其哈希值),然后在内容更改后,您可以尝试将内容解析为JSON,以检查它是否是预期的响应


或者,您可以使用AJAX检查服务器端的上载是否已完成,一旦服务器确认已完成上载,您就可以检查iFrame内容。

您是否尝试将“onload”侦听器附加到iFrame元素,以查看iFrame源更改时是否触发了它?这可能是一个解决办法。如果它不起作用,那么我认为您别无选择,只能从iframe结果执行顶级函数

更新

由于您无法控制来自servlet的响应,也许您可以构建一个与servlet通信的PHP中位数,获取它获得的原始json,然后返回执行父窗口脚本函数并将json传递给该函数所需的内容


通过这种方式可以控制输出。

为什么除了JSON对象之外不能返回任何东西?这似乎是对自己设置的一个非常尴尬的约束。@glenatron json是从java servlet返回的。据我所知(我不是后端人员),有一个通用类在其他servlet中使用,它“构建”并返回json。。。我们通常通过ajax使用这些servlet,但在本例中不使用。。所以当页面加载时,没有地方发送json,所以它会打印json。。。我只需要一种在不改变通用java类的情况下捕获json的方法。。我希望我没有把你弄糊涂:)我可以在iframe中附加onload侦听器,但是一旦表单提交,iframe就会重新加载,我将丢失该侦听器。。。如果有一种方法可以捕获完成的表单提交(上传文件后可能需要x个时间),我可以直接从iframe内部获取json。是的,我正在考虑做第一个选项,但我正在寻找更好的解决方案,因为我想这不是最好的方法。。。第二个概念听起来不错,但是它会使服务器端的事情变得复杂很多,如果你认为有数百个用户可能同时上传文件,那听起来有点复杂…但我会和后端人员核实一下。谢谢这不是一个理想的解决方案,但你不是在一个理想的情况下-如果你是从下往上设计,你会有更多的控制上传脚本的输出,但从你的位置,这应该提供一些工作。无论你在这里做什么,都可能是一种恶作剧。
<iframe onload="alert(window['upload_iframe'].document.body.innerHTML);"  ...></iframe>