我有一个登录脚本,将用户名/密码作为json发送到服务器。它使用POST,所以在客户端使用xhrPost。问题是当我尝试使用Firefox登录时,浏览器不会发出POST请求,而是发出OPTIONS请求并且实际上并不发送任何参数。 Chrome中的代码POST很棒Safari所以Firefox肯定会发生一些事情。登录服务器位于不同的IP:端口,因此它是跨域请求,我不知道这是否重要。
以下是代码:
dojo.xhrPost({
url: settings().get('login_server'),
postData: dojo.toJson({username:user,password:pass}),
handleAs: 'json',
headers: { "Content-Type": "application/json", "Accept": "application/json"},
load: function(data,status) { ... },
error: function(error,status) { ... }
})
答案 0 :(得分:0)
除非服务器支持HTTP access control,否则您无法跨浏览器可靠地使用XMLHttpRequest来执行跨域发布。这就是为什么Dojo正在执行OPTIONS请求,以检查Access-Control-Allow-Origin标头。
您可以使用dojo.io.iframe来POST到另一个域,但是除非登录端点返回特殊格式的页面(基本上在textarea中包含JSON),否则无法检查是否成功完成。
支持XMLHttpRequest Level 2的浏览器可以发出跨域请求。这就是它适用于Chrome / Safari等的原因。