【发布时间】:2014-10-27 03:26:31
【问题描述】:
我正在尝试使用 AJAX 向 nodeJS 服务器发送 CORS 请求。我想返回一些 JSON 数据。我在网上找到了许多教程,它们都说同样的话,我试过了,但我无法让它工作。这是 AJAX 请求:
$.ajax({
url: "http://some.other.url.com:8880",
type: "GET",
crossDomain: true,
contentType: 'application/json'
}).then(function(response) {
$scope.allData = jQuery.parseJSON( response );
console.log($scope.allData);
}).fail(function(response) {
});
这是服务器上的代码:
var path = url.parse(req.url).pathname,
match = router.match(path),
rescode;
console.log("---: " + req.method);
if (req.method === 'OPTIONS') {
var headers = {};
headers["Access-Control-Allow-Origin"] = "*";
headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
headers["Access-Control-Allow-Credentials"] = false;
headers["Access-Control-Max-Age"] = '86400'; // 24 hours
headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
res.writeHead(200, headers);
return res.end();
}
我也试过不返回 res.end(),即不返回 OPTIONS 预检请求,这也不起作用。
--编辑-- 这是控制台中的实际错误消息:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://other.domain.com:8880/. This can be fixed by moving the resource to the same domain or enabling CORS.
服务器正在接收请求。 OPTIONS 和 GET 请求都在访问服务器并得到响应。实际上,在发出 AJAX 请求的页面的控制台日志中,我可以单击 CORS 错误并查看响应,这是正确的数据。但我似乎无法让 javascript 继续。
关于.done 与.then,它们似乎可以互换。或者至少,在这个例子中,.then 和 .fail 工作得很好。
【问题讨论】:
-
那么当你查看它的错误控制台时浏览器会说什么?不同端口上的跨域请求通常是被禁止的,所以我很确定它会告诉你端口不匹配。
-
所以您正在为 OPTIONS 预检发送 CORS 标头。您是否为实际的 GET 请求发送 CORS 标头?
-
我很确定 $.ajax 会返回“完成”承诺而不是“那么”?你得到回应了吗?请提供有关您看到的错误的更多信息。
-
请准确指出失败的原因。服务器是否曾经看到过 GET 请求(即,
console.log("---: " + req.method)是否曾经输出过---: GET)?你在客户端看到了什么错误信息? -
查看我的编辑以获取对这些问题的回复