將Chrome更新到版本30.0.1599.101後,我遇到了類似的問題,結果證明是服務器問題。
我的服務器使用快車(http://expressjs.com/),並允許CORS下面的代碼(How to allow CORS?)實施效果很好:
var express = require("express");
var server = express();
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.headers.origin || "*");
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with');
next();
}
server.configure(function() {
server.use(allowCrossDomain);
});
server.options('/*', function(req, res){
res.header('Access-Control-Allow-Origin', req.headers.origin || "*");
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with');
res.send(200);
});
server.post('/some_service', function (req, res) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
// stuff here
//example of a json response
res.contentType('json');
res.send(JSON.stringify({OK: true}));
});
HTTP請求看起來像:
$http({
method: 'POST',
url: 'http://localhost/some_service',
data: JSON.stringify({
key1: "val1",
key2: "val2"
}),
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}).success(
function (data, status, headers, config) {
//do something
}
).error(
function (data, status, headers, config) {
//do something
}
);
正如在這裏指出, (https://stackoverflow.com/a/8572637/772020),這個想法是確保您的服務器正確處理OPTIONS請求以啓用CORS。
您好,歡迎來到SO,請注意在發佈時將所有示例代碼放在代碼塊中。 – user65439
這個電話是在同一個域名上嗎?我想你可能會試圖調用另一個域,以便瀏覽器出於安全原因而阻止它。嘗試JSONP,如果是這樣的話。 – hjgraca