Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在InternetExplorer7中发布文件并解析xml回复_Javascript_Ajax_Iframe_Internet Explorer 7 - Fatal编程技术网

Javascript 如何在InternetExplorer7中发布文件并解析xml回复

Javascript 如何在InternetExplorer7中发布文件并解析xml回复,javascript,ajax,iframe,internet-explorer-7,Javascript,Ajax,Iframe,Internet Explorer 7,我编写了一个web应用程序,它通过http将文件发布到restful web服务。如果服务发现请求有任何问题,web服务可以使用400或403响应进行回复。响应还包含描述用http错误代码进行响应的原因的xml 我的web应用程序将文件发布到一个隐藏的iFrame,并使用iFrame的onload事件处理程序执行一个函数,该函数解析iFrame中呈现的服务器响应,并让用户知道文件上载的过程 我的解决方案适用于firefox和chrome,但不适用于InternetExplorer7 我的问题是,

我编写了一个web应用程序,它通过http将文件发布到restful web服务。如果服务发现请求有任何问题,web服务可以使用400或403响应进行回复。响应还包含描述用http错误代码进行响应的原因的xml

我的web应用程序将文件发布到一个隐藏的iFrame,并使用iFrame的onload事件处理程序执行一个函数,该函数解析iFrame中呈现的服务器响应,并让用户知道文件上载的过程

我的解决方案适用于firefox和chrome,但不适用于InternetExplorer7

我的问题是,如果服务器响应错误代码,例如400或403 internet explorer 7将加载其自己的静态错误页面。这意味着我的脚本无法解析响应中发送的错误消息,因为静态错误页与脚本本身不在同一域中,并且违反了相同的源策略(而且由于它是静态错误页,web服务的详细错误消息无论如何也不会出现)

对于这个问题,我只看到两种解决方法,如果可能的话,我更愿意避免这两种方法:

A) 当用户代理指示internet explorer时,即使发生错误,web服务仍返回200,但包含指示错误的xml响应

B) 让web应用程序发布到一个“中介”,该中介将请求转发给web服务,读取响应,然后将其转换为200或其他任何有效的方式(因此这基本上是一个选项,但更灵活,至少可以保持restful web服务的“干净”)


是否有其他方法可以解决我的问题?

假设您可以控制服务器,您可能会发现最好的解决方案是仅使用iframe发送文件(即单向…客户端到服务器)。然后使用ajax轮询解决方案确定post是否成功。它可能有点混乱,但应该更可靠,而且你也可以在文章完成之前获得信息

我设法解决了这个问题,因为一位同事记得,如果在发送4xx响应时响应正文的长度不确定,Internet Explorer将加载其静态错误页面


解决方法是用4xx响应发回较长的响应正文,例如包含空白的xml注释。

也许可以使用Ajax而不是Iframe来发布数据?如果服务器用错误代码响应,Iframe上不会触发
错误
事件(而不是
加载
事件)?Brian Driscoll:我正在发布一个或多个文件(来自客户端硬盘),是否可以使用Ajax上载文件?JPot:加载事件已触发,但我在尝试使用javascript访问iFrame时遇到访问拒绝错误。不,您不能通过Ajax发布文件。iframe是唯一的选项。