【发布时间】:2010-11-12 20:09:50
【问题描述】:
我编写了一个 Web 应用程序,它通过 http 将文件发布到一个安静的 Web 服务。如果服务发现请求有任何问题,Web 服务可以回复 400 或 403 响应。响应还包含描述使用 http 错误代码回复的原因的 xml。
我的 Web 应用程序将文件发布到隐藏的 iFrame 并使用 iFrame 的 onload 事件处理程序来执行解析 iFrame 中呈现的服务器响应的函数,并让用户知道文件上传的过程。
我的解决方案适用于 firefox 和 chrome,但不适用于 internet explorer 7。
我的问题是,如果服务器响应错误代码,例如400 或 403 internet explorer 7 加载它自己的静态错误页面。这意味着我的脚本无法解析响应中发送的错误消息,因为静态错误页面与脚本本身不是来自同一个域并且违反了相同的源策略(并且由于它是一个静态错误页面,因此 Web 服务的详细错误反正消息不会在那里)。
对于这个问题,我只看到了两种解决方法,如果可能的话,我宁愿避免它们:
A) 当用户代理指示 Internet Explorer 时,让 Web 服务返回 200,即使发生错误但包含指示错误的 xml 响应。
B) 让 Web 应用程序发布到一个“中介”,该中介将请求转发到 Web 服务,读取响应,然后将其转换为 200 或其他任何有效的(所以它基本上是选项 A,但更灵活,并且在至少这可以保持安静的 Web 服务“干净”)。
还有其他方法可以解决我的问题吗?
【问题讨论】:
-
也许使用 Ajax 而不是 Iframe 来发布您的数据?
-
如果服务器响应错误代码,
error事件不会在 iframe 上触发(而不是load事件)? -
Brian Driscoll:我正在发布一个或多个文件(来自客户端硬盘),是否可以使用 Ajax 上传文件?
-
JPot:加载事件已触发,但在尝试使用 javascript 访问 iFrame 时出现访问被拒绝错误。
-
不,您不能通过 ajax 发布文件。 iframe 是唯一的选择。
标签: javascript ajax iframe internet-explorer-7