【问题标题】:Dojo's xhrPost & FirefoxDojo 的 xhrPost 和 Firefox
【发布时间】:2011-05-23 07:37:45
【问题描述】:

我有一个登录脚本,它将用户名/密码作为 json 发送到服务器。它在客户端使用 POST,因此使用 xhrPost 完成。问题是当我尝试使用 Firefox 登录时,浏览器不会发出 POST 请求,而是发出 OPTIONS 请求并且实际上并没有发送任何参数。代码 POST 在 Chrome 和 Safari 中很棒,所以 Firefox 肯定有一些事情发生。登录服务器在不同的 IP:port 上,所以它是跨域请求,我不知道这是否重要。

代码如下:

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) { ... }
})

【问题讨论】:

  • 通常不使用 ajax 进行登录是有原因的。可能不安全。
  • 感谢您的评论,但这真的无济于事......
  • 这只是一个旁注。我不太确定为什么会这样。你能调试到dojo吗?你用的是什么dojo版本?
  • 奇数。相同的代码在这里工作得很好。您的settings().get('login_server') 究竟返回了什么?
  • settings().get('login_server') 返回http://192.168.1.101:81。我正在使用 Dojo 1.6.1 - 昨天刚刚更新了工具包,以确保它不是旧版本中的错误。

标签: javascript json post dojo http-post


【解决方案1】:

除非服务器支持HTTP access control,否则您无法可靠地跨浏览器使用 XMLHttpRequest 进行跨域发布。这就是 Dojo 执行 OPTIONS 请求以检查 Access-Control-Allow-Origin 标头的原因。

您可以使用 dojo.io.iframe POST 到另一个域,但无法检查是否成功完成,除非登录端点返回一个特殊格式的页面(基本上在 textarea 中包含 JSON)。

支持XMLHttpRequest Level 2的浏览器可以进行跨域请求。这就是它在 Chrome/Safari 等中工作的原因。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多