Ajax 使用凭据和IE8+;兼容性

Ajax 使用凭据和IE8+;兼容性,ajax,json,internet-explorer,post,cross-domain,Ajax,Json,Internet Explorer,Post,Cross Domain,我的一个站点有一个登录设置,用户在主页上的登录弹出窗口中键入信息,然后将信息提交回servlet,然后通过JSON接收回复。然后,主页继续将用户发送到其配置文件页面,或者显示错误(例如,如果用户名和密码不匹配) 我希望将其从GET请求更改为POST,以防止将任意查询字符串发送到servlet中。然而,关于如何制定解决办法,这里似乎有几个考虑因素。它必须: 使用POST而不是GET 是跨域请求(登录页面和servlet位于不同的域上,我可以访问/控制这两个域) 使用withCredentials

我的一个站点有一个登录设置,用户在主页上的登录弹出窗口中键入信息,然后将信息提交回servlet,然后通过JSON接收回复。然后,主页继续将用户发送到其配置文件页面,或者显示错误(例如,如果用户名和密码不匹配)

我希望将其从GET请求更改为POST,以防止将任意查询字符串发送到servlet中。然而,关于如何制定解决办法,这里似乎有几个考虑因素。它必须:

  • 使用POST而不是GET
  • 是跨域请求(登录页面和servlet位于不同的域上,我可以访问/控制这两个域)
  • 使用withCredentials参数(登录功能依赖于JSESSIONID cookie,因此此参数是必需的)
  • 与IE8及以上版本兼容
我曾尝试研究符合上述标准的跨域ajax请求,但主要的症结似乎是IE8/IE9的兼容性。像easyXDM这样的方法在支持这些浏览器方面似乎模棱两可(我在网上看到关于它在IE8中如何工作的相互矛盾的报告),我不想遇到意识到它在实现过程中不会起作用的危险


简言之,有没有一种方法可以使用POST和withCredentials参数进行跨域ajax请求,该参数也与IE8+兼容?easyXDM是这个问题的合适解决方案吗?

我通过使用xdomain库(位于)确定了上述问题的解决方案,该库覆盖了请求行为,允许IE8和IE9中的跨域ajax。这涉及到在xdomain站点上设置proxy.html,如示例所示,以及向服务器响应添加访问控制允许来源和其他相关头。这允许跨域ajax JSON POST请求根据原始POST中列出的标准使用IE8+中的withCredentials。它还允许HTTP和HTTPS之间的跨域请求

$.ajax({
    dataType: 'jsonp',
    async: false,
    url: loginLocation,
    type: 'GET',
    crossDomain: true,
    cache: false,
    xhrFields: crossDomain ? {
        withCredentials: true
    } : {},
    data: ({'key1': value1, 'key2': value2, ..., 'keyN':'valueN'}),
    success: function(data){
        if (data && data.status && data.status == "success") {
            window.location = profileLocation;
        } else {
            errorHandler();
        }
    },
    error: errorHandler
});