【问题标题】:how to send JSON data in a GET api?如何在 GET api 中发送 JSON 数据?
【发布时间】:2019-07-19 17:46:15
【问题描述】:

我有一个获取 json 输入的 GET api。当我在失眠症中测试请求时效果很好,但在测试后我从失眠症中生成 jquery 代码并将其粘贴到 chrome 控制台中。这是代码:

var data = JSON.stringify({
  "tags": [
    100
  ]
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "http://localhost/panel-api-backend/public/api/foods");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);

当我收到响应时,似乎输入(tags 字段)不是由 api 发送的。当我将请求动词更改为POST。一切都好。 javascript 是否有任何原因无法将 JSON 输入发送到 API?

【问题讨论】:

  • 为什么这个标签是jquery
  • 也不适用于 jquery @Andreas
  • .send( data ) 表示您希望将数据作为请求的主体发送。但是大多数服务器不处理 GET 请求中的请求正文,因为规范声明 GET 请求返回 URL 描述的资源,正文无关紧要。因此,如果您需要随请求发送数据,则不能使用 GET(改为使用 POST),或者您必须在 URL 中以查询字符串的形式发送数据,如下面的答案之一所示。

标签: javascript jquery ajax rest api


【解决方案1】:

您可以使用QueryString 向GET 请求发送数据

var tags=[100,200];

$.ajax({
      url:`yoururl?tags=${tags}`,
      type:'GET',
      success:function(response){
        console.log(response);
      },
      error:function(err){

      }
    });

你也可以这样发送:

var tags=JSON.stringify({"tags":[100,200]});

【讨论】:

    【解决方案2】:

    感谢@Shilly,我找到了答案。 GET 请求没有正文。所以不可能通过我们在 POST 请求中发送 JSON 数据的方式来发送它们。解决方案简单的 json 输入(如数组)是将它们放入请求查询中,如下所示:

    http://siteurl.com/api-get?arr[]=value1&arr[]=value2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2020-04-16
      • 2021-12-16
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多