2012-02-29 36 views
0

一些設置信息:我們使用jQuery for AJAX(和其他的東西,但AJAX涉及到這個問題),服務器的Node w/Express和測試的Chrome 17/Firefox 10(我們不需要兼容性與IE)。爲什麼跨域請求在Chrome中工作,但在從Node(Express)服務器請求時在Firefox中失敗?

我們遇到的問題是在向節點服務器發出跨域請求時無法獲得響應。爲了開發的目的(也是因爲我們現在必須運行Apache服務器),我們在端口3001(localhost:3001)上運行節點服務器,即使在本地主機上,它也被瀏覽器視爲跨域至少在我的經驗試圖讓本地主機上的兩臺服務器相互交談)。

我有app.enable("jsonp callback")設立這奇妙的作品爲我們GET路由服務器上但它似乎不工作這麼好我們的POST路線(這是所有在房子的權利,但更好的選擇,也歡迎建議)。

有問題的路線定義如下:

app.post("/create", function(req, res) { 
    // Added the next 3 lines as a test and it seemed to add success, 
    // not happy with it though 
    var ref = req.header("Referer"); 
    res.header("Access-Control-Allow-Origin", ref); 
    res.header("Access-Control-Allow-Methods", "POST"); 
    console.log(req.body); // echo request body 
    res.json({success: true}); // return a notification of success 
}); 

Ajax請求的樣子:

// The URL is either the IP of the server or Localhost 
$.ajax({ 
    url: "http://localhost:3001/create", 
    data: { 
    name: "john" 
    }, 
    crossDomain: true, 
    type: "POST", 
    dataType: "json", 
    success: function(r) { 
    console.log(r); 
    }, 
    error = function() { 
    alert("Failed"); 
    } 
}; 

一些細微的信息,當我們使用上述火狐dataType: "jsonp"它只是失敗一個404,但實際上只發送請求"json"。另一點信息是沒有crossDomain: true該請求根本不起作用。上面提到的Firefox請求實際上通過了服務器,但是在收到響應之前它出錯了。

該請求正常工作並在Chrome中成功,但在Firefox中失敗。根據控制檯,響應返回狀態「200 OK」,但它仍然觸發jQuery.ajax錯誤函數,其中statusCode0statusTextError(這非常有幫助......),儘管我們已經嘗試過我們還沒有取得任何進展。

任何幫助或方向在哪裏去解決這個問題,非常感謝。

UPDATE

只是爲了更新的緣故。這個問題已經停止發生,也許這是我們的代碼中的一些潛在錯誤,我們在重構中沒有意識到它修復了它,或者它是Firefox中的錯誤已經修復。無論哪種方式,我們不再遇到這個問題。

回答

0

假設你想做JSONP樣式回調,你需要兩件事:app.enable("jsonp callback")(不是app.enable("json callback"))。另外,您需要通過在URL中指定callback=?來指示jQuery執行JSONP調用。

+0

是的,你是對的,它是'jsonp回調',我錯誤地複製了它(但現在糾正了它)。此外,如果我告訴jQuery直接執行「jsonp」請求,它根本不起作用 - 事實上,它完全忽略了POST並僅發送GET請求。但是,使用'crossDomain:true'並使用'dataType:「json」'請求起作用。反正這不是我真正的問題,問題是爲什麼它在Chrome中運行,而不是在Firefox中運行? – 2012-02-29 13:35:14

+0

只是爲了嘗試我試圖實現你提出的解決方案,但它開始咆哮404沒有找到 - 相反,我的上述用法響應通過並返回一個「200 OK」但仍然失敗在Firefox(不是鉻)。 – 2012-02-29 18:44:37

相關問題