Javascript&;Node.js-发出JSON请求

Javascript&;Node.js-发出JSON请求,javascript,jquery,json,node.js,Javascript,Jquery,Json,Node.js,在本文中,我了解到在node.js中,您可以区分html请求和json请求,如下所示: app.get('/route', function (req, res) { if (req.is('json')) res.json(data); else if (req.is('html')) res.render('view', {}); else ... }); 现在我的问题是,如何在节点服务器中发出解释为json的请求? 因为我试过使用$.ajax和$.getJson,

在本文中,我了解到在node.js中,您可以区分html请求和json请求,如下所示:

app.get('/route', function (req, res) {
    if (req.is('json')) res.json(data);
    else if (req.is('html')) res.render('view', {});
    else ...
});
现在我的问题是,如何在节点服务器中发出解释为json的请求?
因为我试过使用$.ajax和$.getJson,并在浏览器中键入,所有这些都是html请求。
这是我的要求

$.ajax({ type: 'GET', url: "/test", dataType:"json", success: function(data){log(data)}})

尝试设置
contentType
参数

$.ajax({
    type: 'GET',
    url: 'your_url',
    data: {
        test: "test"
    },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    ....
});
编辑:

您可以使用 你所要做的就是

var request = require('request');

var options = {
  uri: 'your_server_side_url',
  method: 'POST',
  json: {
    "data": "some_data"
  }
};

request(options, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body.id) // Print the shortened url.
  }
});

查看github链接。可能模块会让您的生活更轻松

尝试设置
contentType
参数

$.ajax({
    type: 'GET',
    url: 'your_url',
    data: {
        test: "test"
    },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    ....
});
编辑:

您可以使用 你所要做的就是

var request = require('request');

var options = {
  uri: 'your_server_side_url',
  method: 'POST',
  json: {
    "data": "some_data"
  }
};

request(options, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body.id) // Print the shortened url.
  }
});
查看github链接。可能是该模块将使您的生活更轻松

该方法通过检查
内容类型
标题来检查传入请求类型,因此您需要确保在发送请求之前在请求中设置该标题,例如

$.ajax({
    type: 'GET',
    url: '/route',
    contentType: "application/json; charset=utf-8",
    ....
});
但是,标头用于确定请求正文的格式,而不是响应。建议您使用标题来通知服务器什么类型的格式适合响应,例如

app.get('/route', function (req, res) {
    if (req.accepts('html')) {
        res.render('view', {});
    } else if (req.accepts('json')) {
        res.json(data);
    } else {
        ...
    }
});
然后在客户机上,您不需要担心
内容头
,而是
接受
头,jQuery已经为此提供了一些方便的方法

该方法通过检查
内容类型
标头来检查传入的请求类型,因此您需要确保在发送请求之前在请求中设置此标头,例如

$.ajax({
    type: 'GET',
    url: '/route',
    contentType: "application/json; charset=utf-8",
    ....
});
但是,标头用于确定请求正文的格式,而不是响应。建议您使用标题来通知服务器什么类型的格式适合响应,例如

app.get('/route', function (req, res) {
    if (req.accepts('html')) {
        res.render('view', {});
    } else if (req.accepts('json')) {
        res.json(data);
    } else {
        ...
    }
});
然后在客户机上,您不需要担心
内容头
,而是
接受
头,jQuery已经为此提供了一些方便的方法



您在ajax调用中设置了datatype=json吗?是的,我在ajax调用中设置了datatype=json,但没有任何差异吗?是的,我在客户端中不需要结果,我检查服务器如何查看请求。首先,您必须确保ajax请求已正确发送到服务器请求已发送到服务器,因为我可以记录请求。我没有收到任何错误,请求应为“json”类型,但始终为“html”类型即使有contentType和所有内容,你的答案也不是我想要的,但你可以投票。我不需要客户端的结果,我会检查服务器是如何看到请求的。首先,你必须确保ajax请求正确发送到服务器请求发送到服务器很好,因为我可以记录请求。我没有收到任何错误,请求应该是“json”类型,但它始终是“html”类型,即使有contentType和所有内容。您的答案不是我想要的,但您无论如何都会获得投票。谢谢,这确实有效,但当我在broswer中输入url时(不是$.ajax)它仍然以json的形式接受请求,这不应该是html吗?@user3425760您可能会发现浏览器告诉服务器它可以接受json和html响应。你可以更新你的
get
方法来优先考虑HTML而不是JSON,我已经更新了我的答案来演示这一点。谢谢,这确实有效,但是当我在broswer(不是$.ajax)中输入url时,它仍然接受作为JSON的请求,这不是应该是html吗?@user3425760您可能会发现浏览器告诉服务器它可以接受JSON和html响应。您可以更新您的
get
方法,使HTML优先于JSON,我已经更新了我的答案来演示这一点。