2011-05-23 48 views
2

我有一個登錄腳本,以用戶名/密碼作爲json發送到服務器。它在客戶端使用POST,它使用xhrPost完成。問題是,當我嘗試使用Firefox進行登錄時,瀏覽器不會發出POST請求,但它會發出OPTIONS請求,並且實際上不會發送任何參數。 Chrome中的代碼POST很棒& Safari,所以Firefox肯定會有一些事情發生。登錄服務器位於不同的IP:端口,因此它是跨域請求,我不知道這是否重要。Dojo的xhrPost&Firefox

下面的代碼:

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

有一個原因,登錄通常不使用ajax完成。這可能是不安全的。 – 2011-05-23 08:01:34

+0

感謝您的評論,但這真的沒有幫助... – jimmyd 2011-05-23 08:36:13

+0

這只是一個側面說明。我不確定爲什麼會發生。你能調試成dojo嗎?你使用的是什麼dojo版本? – 2011-05-23 09:26:06

回答

0

你不能可靠地使用XMLHttpRequest跨瀏覽器做跨域後,除非該服務器支持HTTP access control。這就是爲什麼Dojo正在執行OPTIONS請求,以檢查Access-Control-Allow-Origin標頭。

您可以使用dojo.io.iframe POST到另一個域,但除非登錄端點返回特殊格式的頁面(基本上包含textarea內的JSON),否則檢查成功完成是不可能的。

支持XMLHttpRequest Level 2的瀏覽器可以進行跨域請求。這就是爲什麼它在Chrome/Safari等工作。