【问题标题】:How to send a header with Ajax如何使用 Ajax 发送标头
【发布时间】:2017-04-12 22:57:40
【问题描述】:

我创建了一个静态网站,我想使用这个 Ajax 函数向NodeJs Express REST API 发送一个带有 http 标头的请求。但是当我发送它时,我无法通过 REST API 获取任何令牌字段。

 $.ajax({
                beforeSend: function (request) {
                    request.setRequestHeader("token", 'vjhvjhvjhvjhbjhsbvkjsbvkjsbkvjbskjvb');            
                },
                dataType: "json",
                url: "http://localhost:3000/feeds",
                success: function (data) {
                   //do something
                }
            });

当我用 Postman 发送它时,我可以很容易地得到它。这是 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);    
});

我该如何解决这个问题?

【问题讨论】:

  • 我认为您不能将'Access-Control-Allow-Credentials', true 与通配符"Access-Control-Allow-Origin", "*" 一起使用
  • 我已经删除了,还是下不了。
  • 不删除但指定"Access-Control-Allow-Origin", "origin you are making requests from"并将token添加到允许的标题
  • Access-Control-Allow-Origin", "token" 是你的意思吗?

标签: javascript jquery node.js ajax


【解决方案1】:

AJAX 标头可以设置为全局,如下所示。

$.ajaxSetup({
  headers: {
   'token':'token_vlaue',
   'another_field': 'another_field_value'
  }
});

【讨论】:

  • thanx 但无法得到它。
  • 只需将我给你的代码添加到文档准备功能中,它适用于所有 ajax,附加令牌字段。
  • 我不知道如何向您展示所有代码,但代码工作正常,如果我不使用标题,他可以获得 json 文件
  • 只需输入您的代码kopy 并与我分享网址。如果它的工作,那么它的好。
【解决方案2】:

你试过了吗

$.ajax({
    headers: {
        'Accept': 'application/json;',
        'Content-Type': 'application/x-www-form-urlencoded',
        'custom_key': 'custom_value'
    },
    dataType: "json",
    ...
)};

【讨论】:

  • 我现在做了,但无法得到它。
  • 澄清一下,您的问题是您无法访问您在前端应用中创建的后端路由?也许您使用了错误的网址?
【解决方案3】:

您在错误的代码块中查找令牌。您需要先正确设置 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();
});

【讨论】:

  • 这不是问题,因为我删除了中间件并发送到 router.get,但也无法获取。
  • 解决方案是什么?
【解决方案4】:

您可以尝试这样发送:

$.ajax({
    url: "http://localhost:3000/feeds",
    headers: { 'token': 'vjhvjhvjhvjhbjhsbvkjsbvkjsbkvjbskjvb' }
});

这里有一个更详细的答案,可能会对您有所帮助:answer

【讨论】:

  • 链接另一个答案没有意义。如果您认为问题是重复的,请投票将其关闭为重复。
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2019-05-23
  • 2017-10-29
相关资源
最近更新 更多