Javascript 如何使用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');

我创建了一个静态网站,我想用这个Ajax函数向一个
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,而那里也无法获取。解决方案是什么?