Jquery 为什么跨域请求在Chrome中有效,但在Firefox中从节点(Express)服务器请求时失败?

Jquery 为什么跨域请求在Chrome中有效,但在Firefox中从节点(Express)服务器请求时失败?,jquery,ajax,node.js,cross-domain,express,Jquery,Ajax,Node.js,Cross Domain,Express,一些设置信息:我们正在使用jQuery来实现AJAX和其他功能,但是AJAX与这个问题有关,Node w/Express用于服务器,chrome17/firefox10用于测试,我们不需要与IE兼容 我们遇到的问题是在向节点服务器发出跨域请求时无法获得响应。出于开发目的,也因为我们必须在这个服务器之外运行Apache,现在我们在端口3001 localhost:3001上运行节点服务器,即使在localhost上,浏览器也认为它是跨域的,至少在我尝试让localhost上的两个服务器相互通信的经

一些设置信息:我们正在使用jQuery来实现AJAX和其他功能,但是AJAX与这个问题有关,Node w/Express用于服务器,chrome17/firefox10用于测试,我们不需要与IE兼容

我们遇到的问题是在向节点服务器发出跨域请求时无法获得响应。出于开发目的,也因为我们必须在这个服务器之外运行Apache,现在我们在端口3001 localhost:3001上运行节点服务器,即使在localhost上,浏览器也认为它是跨域的,至少在我尝试让localhost上的两个服务器相互通信的经验中是这样的

我在服务器上设置了app.enablejsonp回调,它对我们的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中失败。根据控制台,响应返回的状态为200OK,但仍会触发jQuery.ajax错误函数,其中statusCode为0,statusText为error,这非常有用。。。尽管我们已经尝试过了,但在这方面我们没有取得任何进展

我们非常感谢您为解决此问题提供的任何帮助或指导

更新


只是为了更新。这个问题已经停止发生,可能是我们在重构中修复了代码中的一些潜在错误而没有意识到,或者是Firefox中的bug已经修复。无论哪种方式,我们都不会再遇到这个问题。

假设您想要执行JSONP样式的回调,您需要两件事:app.enablejsonp回调而不是app.enablejson回调。另外,您需要通过指定callback=?来指示jQuery执行JSONP调用?在URL中。

是的,你是对的,这是jsonp回调,我错误地复制了它,但现在更正了它。另外,如果我让jQuery直接执行jsonp请求,它根本不起作用——事实上,它完全忽略POST,只发送GET请求。但是,使用crossDomain:true并使用dataType:json,请求可以工作。不管怎么说,这不是我真正的问题,问题是为什么它在Chrome中工作而在Firefox中不工作?只是为了尝试,我试图实现你提出的解决方案,但它开始发出“404 not found”的叫声-与我上面的用法相反,在Firefox not Chrome中,响应通过并返回200 OK,但仍然失败。