2012-02-29 4 views
0

いくつかの設定情報:私たちはAJAX(そして他のものだがAJAXはこの質問に関係している)のためにjQueryを使用している。サーバ用のExpressを持つノードとテスト用のChrome 17/Firefox 10 IEの場合)。クロスドメインリクエストはChromeで動作しますが、ノード(Express)サーバーからのリクエスト時にFirefoxで失敗するのはなぜですか?

私たちが取り組んでいる問題は、ノードサーバーへのクロスドメイン要求を行うときに応答を得られないことです。開発のために(また、このサーバーに加えてApacheを実行する必要があるため)、ポートサーバー3001(localhost:3001)でノードサーバーを実行しています。少なくとも私の経験では、お互いに話すためにローカルホスト上に2台のサーバを取得しようとしています)。

私たちのGETルートの素晴らしい作品サーバー上で設定app.enable("jsonp callback")、しかし、それは私たちのPOSTルートをとてもうまく機能していないようしている(これは今、すべての家にある、より良い代替手段はとして歓迎されています提案)。次のように

問題のルートが定義されています。私たちはdataType: "jsonp"とFirefoxで上記を使用する場合、それは単にで失敗し、

// 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"); 
    } 
}; 

いくつかのマイナーな情報:

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要求は次のようになりますa 404ですが、実際には"json"でリクエストを送信します。情報のもう1つのビットは、crossDomain: trueがないと要求がまったく機能しないということです。上記で行われたFirefoxリクエストは、実際にはサーバーに送られますが、応答を受け取る前にエラーになります。

リクエストは正常に動作し、Chromeで成功しますが、Firefoxでは失敗します。コンソールによれば、レスポンスは "200 OK"のステータスを返すが、statusCodeのの0statusTextErrorのjQuery.ajaxエラー関数を起動する(これは非常に役に立ちます...)私たちはこの仕事をする上で進歩を遂げていません。

この問題を解決するための助けを借りてください。ただ、更新のために

UPDATE

。この問題は発生しなくなりました。リファクタで修正されたコードの根底にあるエラーです。修正されたFirefoxのバグだったかもしれません。いずれにしても、この問題は発生しなくなりました。

答えて

0

JSONPスタイルコールバックを行う場合は、app.enable("jsonp callback")app.enable("json callback")ではない)が必要です。また、URLにcallback=?を指定してjQueryにJSONP呼び出しを指示する必要があります。

+0

はい、あなたは正しいです、それは 'jsonp callback'です。私はそれを間違ってコピーしましたが、今修正しました。また、jQueryにjsonpの '' jsonp ''リクエストを行うように指示しても、まったく動作しません。実際はPOSTを完全に無視してGETリクエストを送信するだけです。しかし、 'crossDomain:true'を使用し、' dataType: "json" 'を使用するとリクエストが機能します。とにかくそれは私の本当の疑問ではないですが、なぜそれがFirefoxではなくChromeで動作するのでしょうか? –

+0

私はあなたの提案されたソリューションを実装しようとしましたが、応答がなくなり、 "200 OK"を返す上記の使用法とは対照的に、404が見つかりませんでしたが、Firefoxでは(Chromeではなく)失敗します。 –

関連する問題