使用jQuery $ .ajax()时如何使用GET在请求正文中发送数据

2020/11/30 23:11 · jquery ·  · 0评论

我正在使用的服务API具有给定的GET方法,该方法要求将数据发送到请求的正文中。

正文中所需的数据是用连字符分隔的ID列表,并且可能非常大,因此必须在正文中发送,否则它可能会在浏览器/代理/网络服务器等链中的某处出现foobar。请注意,我无法控制服务或API,因此请不要提出更改建议。

我正在使用以下jQuery代码,但是在提琴手中观察请求/响应,尽管我将“ processData”选项设置为false,但我仍可以看到正在发送的“数据”始终被转换并附加到查询字符串中。

$.ajax({
   url: "htttp://api.com/entity/list($body)",
   type: "GET",
   data: "id1-id2-id3",
   contentType: "text/plain",
   dataType: "json",
   processData: false, // avoid the data being parsed to query string params
   success: onSuccess,
   error: onError
});

有谁知道我可以如何强制在请求正文中发送“数据”值?感谢您的任何帮助,在此先感谢。

通常,这不是系统使用GET请求的方式。因此,很难使您的库发挥作用。实际上,该规范说:“如果请求方法是GET或HEAD的区分大小写的匹配项,则好像数据为空。” 因此,除非您使用的浏览器不遵守规范的那一部分,否则我认为您不走运。

您可能可以在自己的服务器上为POST ajax请求设置一个端点,然后将其在服务器代码中重定向到带有主体的GET请求。

如果您不是绝对以主体作为数据来绑定GET请求,则有两个选择。

带有数据的POST:这可能是您想要的。如果要传递数据,则可能意味着您正在修改某些模型或在服务器上执行某些操作。这些类型的操作通常是通过POST请求完成的。

使用查询字符串数据进行GET:您可以将数据转换为查询字符串参数,然后将其以这种方式传递给服务器。

url: 'somesite.com/models/thing?ids=1,2,3'

我们大家都普遍知道,为了根据http标准发送数据,我们通常使用POST请求。但是,如果您确实想在场景中使用Get来发送数据,我建议您使用查询字符串或查询参数。

1.GET使用Query string作为
{{url}}admin/recordings/some_id

这里some_id是要发送的强制性参数,可以在服务器端req.params.some_id一起使用

2. GET使用查询字符串作为{{url}}admin/recordings?durationExact=34&isFavourite=true

在这里,durationExact,isFavourite是要发送的可选字符串,可以在服务器端使用req.query.durationExactreq.query.isFavourite

3. GET发送数组
{{url}}admin/recordings/sessions/?os["Windows","Linux","Macintosh"]

您可以像这样在服务器端访问这些数组值

let osValues = JSON.parse(req.query.os);
        if(osValues.length > 0)
        {
            for (let i=0; i<osValues.length; i++)
            {
                console.log(osValues[i])
                //do whatever you want to do here
            }
        }

您可以通过“ HEADERS”发送类似于“ POST”请求的数据。

像这样:

$.ajax({
   url: "htttp://api.com/entity/list($body)",
   type: "GET",
   headers: ['id1':1, 'id2':2, 'id3':3],
   data: "",
   contentType: "text/plain",
   dataType: "json",
   success: onSuccess,
   error: onError
});

以防万一仍然有人遇到这个问题:

任何请求中都有一个正文查询对象。您不需要自己解析它。

例如,如果您想使用GET从客户端发送accessToken,则可以这样做:

const request = require('superagent');

request.get(`http://localhost:3000/download?accessToken=${accessToken}`).end((err, res) => {
  if (err) throw new Error(err);
  console.log(res);
});

然后,服务器请求对象看起来像 {request: { ... query: { accessToken: abcfed } ... } }

本文地址:http://jquery.askforanswer.com/shiyongjquery-ajaxshiruheshiyonggetzaiqingqiuzhengwenzhongfasongshuju.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!