いくつかの設定情報:私たちは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
のの0
とstatusText
のError
のjQuery.ajaxエラー関数を起動する(これは非常に役に立ちます...)私たちはこの仕事をする上で進歩を遂げていません。
この問題を解決するための助けを借りてください。ただ、更新のために
UPDATE
。この問題は発生しなくなりました。リファクタで修正されたコードの根底にあるエラーです。修正されたFirefoxのバグだったかもしれません。いずれにしても、この問題は発生しなくなりました。
はい、あなたは正しいです、それは 'jsonp callback'です。私はそれを間違ってコピーしましたが、今修正しました。また、jQueryにjsonpの '' jsonp ''リクエストを行うように指示しても、まったく動作しません。実際はPOSTを完全に無視してGETリクエストを送信するだけです。しかし、 'crossDomain:true'を使用し、' dataType: "json" 'を使用するとリクエストが機能します。とにかくそれは私の本当の疑問ではないですが、なぜそれがFirefoxではなくChromeで動作するのでしょうか? –
私はあなたの提案されたソリューションを実装しようとしましたが、応答がなくなり、 "200 OK"を返す上記の使用法とは対照的に、404が見つかりませんでしたが、Firefoxでは(Chromeではなく)失敗します。 –