【发布时间】:2012-03-18 12:22:33
【问题描述】:
一些设置信息:我们将 jQuery 用于 AJAX(和其他东西,但 AJAX 与这个问题有关),Node w/ Express 用于服务器,Chrome 17/Firefox 10 用于测试(我们不需要与 IE 兼容)。
我们遇到的问题是向 Node 服务器发出跨域请求时无法获得响应。出于开发目的(也因为我们现在必须在此服务器之外运行 Apache),我们在端口 3001 (localhost:3001) 上运行节点服务器,即使在 localhost 上,浏览器也将其视为跨域(在至少根据我的经验,试图让 localhost 上的两台服务器相互通信)。
我在服务器上设置了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");
}
};
一些次要信息,当我们在 Firefox 中使用上面的 dataType: "jsonp" 时,它只会以 404 失败,但实际上只使用 "json" 发送请求。另一点信息是,没有crossDomain: true,请求根本不起作用。用上述方法发出的 Firefox 请求实际上是通过服务器,但是在收到响应之前它就出错了。
请求工作正常,在 Chrome 中成功,但在 Firefox 中失败。根据控制台,响应返回“200 OK”状态,但它仍然触发 jQuery.ajax 错误函数,其中 0 的 statusCode 和 Error 的 statusText (这非常有帮助...... ) 尽管我们已经尝试过,但在完成这项工作方面并没有取得任何进展。
非常感谢任何有关解决此问题的帮助或指导。
更新
只是为了更新。这个问题已经停止发生,也许是我们在重构中修复的代码中的一些潜在错误而没有意识到它,或者是 Firefox 中的错误已被修复。无论哪种方式,我们都不再遇到此问题。
【问题讨论】:
标签: jquery ajax node.js cross-domain express