如何使用 jQuery $.ajax() 时使用 GET 在请求正文中发送数据
How to send data in request body with a GET when using jQuery $.ajax()
我正在使用的服务API具有给定的GET方法,该方法要求在请求正文中发送数据。
正文中所需的数据是由连字符分隔的 id 列表,可能非常大,因此必须在正文中发送,否则它可能会在浏览器/代理/网络服务器等链中的某个地方出现。注意 我无法控制服务或 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.获取查询字符串的使用。 {{url}}admin/recordings/some_id
这里的some_id是要发送的强制性参数,可以在服务器端使用和req.params.some_id。
2.获取查询字符串的使用作为{{url}}admin/recordings?durationExact=34&isFavourite=true
这里的durationExact ,isFavoring是要发送的可选字符串,可以使用和req.query.durationExact 和req.query.isFavorite 在服务器端。
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
}
}
一有人仍然提出这个问题:
任何请求中都有一个正文查询对象。您无需自己解析它。
例如,如果你想用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 } ... } }
你知道,我有一个不太标准的方法。我通常使用 nextjs。如果可能的话,我喜欢让事情变得宁静。如果我需要发出 get 请求,我会改用 post,并在正文中添加一个子方法参数,即 GET。此时我的服务器端会处理它。我知道它在技术上仍然是一种 post 方法,但这清楚地表明了意图,我不需要添加任何查询参数。然后,get 方法使用 post 方法中提供的数据处理 get 请求。希望这有所帮助。这是围绕正确协议的一个小步骤,但它确实意味着没有疯狂的工作,服务器端的代码可以毫无问题地处理它。服务器端存在的第一件事是 if(subMethod === "GET"){|做任何你需要的事情|}
- 有没有一种方法可以防止img get请求使用css或js发生
- jQuery Ajax GET请求工作不正常
- Angularjs http.get() Cross-Origin 请求被阻止
- 将GET请求(HTML字符串)转换为完整的DOM对象
- 如何在nightwatch.js中发送ajax get请求
- 当我在chrome中切换设备模式时,$http.get请求失败
- 根据GET请求的结果自定义页面内容
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Codeigniter JQuery在JQuery.get请求后动态加载视图中的数据
- 错误Jquery.$.get()请求
- 如果我对一个文件发出ajax GET请求,我会得到什么以及如何将其添加到页面中
- JQuery AJAX 在 GET 请求完成时返回 XML
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 嵌套在 .get 请求中的 jQuery 不会执行
- 如何在 GET 请求中序列化查询的对象
- Angular 2:如何在 GET 和 POST 请求中设置 double、float、int 和布尔类型参数
- Jquery.ajax 请求 'Get' to Web API 2 后端不起作用
- 我如何使用NodeJs请求GET模块发送cookie
- 错误的错误.GrailsExceptionResolver -在处理请求:[GET]时发生NullPointerExce
- Angular js $http请求 get 失败