我的一个站点的登录设置,用户将其信息输入到主页上的登录弹出窗口,然后将信息提交回servlet,然后通过JSON接收回复。然后主页继续将用户发送到他们的个人资料页面,或者显示错误(例如,如果用户名和密码不匹配)。
$.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
});
我希望将此更改从GET请求更改为POST,以防止将任意查询字符串发送到servlet。但是,似乎在这里有几个关于应该如何制定解决方案的考虑因素。它必须:
我试过调查符合上述标准的跨域ajax请求,但主要的关键点似乎是IE8 / IE9的兼容性。像easyXDM这样的方法在支持这些浏览器方面似乎含糊不清(我在网上看到过关于IE8如何工作的相互矛盾的报告)我不想冒险意识到它在实现中途不会起作用
简而言之,是否有办法使用POST和withCredentials参数进行跨域ajax请求,这也与IE8 +兼容? easyXDM是一个合适的解决方案吗?
答案 0 :(得分:0)
我能够通过使用xdomain库(在https://github.com/jpillora/xdomain找到)来确定上述问题的解决方案,该库覆盖了请求行为以允许IE8和IE9中的跨域ajax。这包括设置proxy.html,如xdomain站点上的示例所示,以及将Access-Control-Allow-Origin和其他相关标头添加到服务器响应。这允许按照原始帖子中列出的条件在IE8 +中使用withCredentials进行跨域ajax JSON POST请求。它还允许HTTP和HTTPS之间的跨域请求。