我很困惑XMLHttpRequest和XDomainRequest轮回,并希望得到一些帮助。因此,这里是我的发现:XDomainRequest对IE8和IE9的XMLHttpRequest
- 的XDomainRequest在IE8和IE9似乎是某种XMLHttpRequest的子类
- 的XDomainRequest缺乏 “withCredentials”
- 的XDomainRequest缺乏 “的onLoad” 的(?)事件迫使你使用状态和状态IFs - 编辑:这不完全正确。如果您在IE8和IE9中实例化XDomainRequest,则onLoad可用。如果您在EI8或IE9中实例化XMLHttpRequest,onLoad不可用。我们将在下面看到为什么这很重要。
- 此外,它以纯文本格式提交数据,而不是以强制解析输入流的形式提交数据。
- 即使CORS服务器的“Allow-Headers”指令允许客户端读取Set-Cookie,XDomainRequest也不会公开它使得不能使用cookie存储的会话iDs来进行身份验证。
- 最后,如果我没有错,它只允许POST和GET http方法使RestFull Web服务无用。
这个列表并不完整,正如我所说,它是基于我的发现。然而,这是混乱开始的地方。我有一个应用程序,通过Ajax我必须:
- 通过GET加密密钥以及与其关联的会话ID获取(跨域)。
- 使用使用POST和X WWW的形式,进行了urlencoded的用户名和加密的密码,该键(这里没问题)
- 登录到跨域(在那里我得到了在步骤1中的密钥)加密我的用户密码。
现在对于所有上述原因,我不能与XDomainRequest做到这一点:
- 一是因为XDomainRequest:开(方法,URL)只发送纯文本和我的第三方应用程序期待形式(我可以写一个过滤器/请求拦截器,但这不是重点)。
- 因为我通过Set-Cookie头(第1步)加密密钥到达的会话ID永远不会发回到跨域,因为XDomainRequest不会公开头信息。
然而,如果在IE8和IE9我实例化一个XMLHttpRequest不顾所有这些检查描述here,一切工作正常!好吧,我没有得到onload事件,我不确定“withcredentials”是什么故事,但IE8和IE9似乎没有问题,使用XMLHttpRequest跨域。但为什么?这些矛盾并不全是吗?我只是想解释一下这个问题,因为我担心在IE8和IE9中使用XMLHttpRequest可能会在某个时候回来并咬人。我可以问一个清楚的例子,当有人可以使用这个而不是另一个吗?更好的是,IE8和IE9有没有解决这个问题的更新?
任何帮助,将不胜感激雅尼斯