Javascript 如何使用Ajax发送标题
我创建了一个静态网站,我想用这个Ajax函数向一个Javascript 如何使用Ajax发送标题,javascript,jquery,node.js,ajax,Javascript,Jquery,Node.js,Ajax,我创建了一个静态网站,我想用这个Ajax函数向一个NodeJs Express REST API发送一个带有http头的请求。但是当我发送它时,RESTAPI无法获取任何令牌字段 $.ajax({ beforeSend: function (request) { request.setRequestHeader("token", 'vjhvjhvjhvjhbjhsbvkjsbvkjsbkvjbskjvb');
NodeJs Express REST API
发送一个带有http头的请求。但是当我发送它时,RESTAPI无法获取任何令牌字段
$.ajax({
beforeSend: function (request) {
request.setRequestHeader("token", 'vjhvjhvjhvjhbjhsbvkjsbvkjsbkvjbskjvb');
},
dataType: "json",
url: "http://localhost:3000/feeds",
success: function (data) {
//do something
}
});
当我和邮递员一起寄的时候,我可以很容易地得到它。下面是NodeJS中间件
router.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
console.log(req.headers.token);
});
如何解决这个问题?可以将AJAX头设置为全局,如下所示
$.ajaxSetup({
headers: {
'token':'token_vlaue',
'another_field': 'another_field_value'
}
});
你试过了吗
$.ajax({
headers: {
'Accept': 'application/json;',
'Content-Type': 'application/x-www-form-urlencoded',
'custom_key': 'custom_value'
},
dataType: "json",
...
)};
您可以尝试这样发送:
$.ajax({
url: "http://localhost:3000/feeds",
headers: { 'token': 'vjhvjhvjhvjhbjhsbvkjsbvkjsbkvjbskjvb' }
});
这里有一个更详细的答案可以帮助您:您在错误的代码块中查找令牌。您需要首先正确设置CORS,然后您的令牌将显示在正确的路由中 下面是一个用于CORS的正确模式的示例
//CORS middleware
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,token');
res.header('Access-Control-Allow-Credentials', true);
next();
}
//...
app.configure(function() {
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.methodOverride());
app.use(allowCrossDomain);
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('feeds', function(req, res, next) {
console.log(req.headers.token);
next();
});
我认为您不能将
'Access-Control-Allow-Credentials',true
与通配符“Access-Control-Allow-Origin”、“*”
一起使用。我已将其删除,但仍然无法获取。请不要删除,而是指定“Access-Control-Allow-Origin”,“您正在向其发出请求的源”
并将令牌添加到允许的标头Access Control Allow Origin”,“令牌”“这就是你的意思吗?把另一个答案联系起来是没有意义的。如果您认为问题是重复投票,请将其作为重复投票关闭。我现在投票了,但无法获得。请澄清,您的问题是您无法访问在前端应用程序中创建的后端路由?也许你使用了错误的url?thanx,但无法获得它。只需将我给你的代码添加到document ready函数中,它就可以用于所有ajax,附加令牌字段。我不知道如何向你显示所有代码,但代码工作正常,如果我不使用Headers,他可以获得json文件。只需将你的代码放入并与我共享url即可。如果它能工作,那就好了。让我们来吧。这不是问题,因为我已经删除了中间件并将其发送到router.get,而那里也无法获取。解决方案是什么?