JQuery,使用GET方法发送JSON对象

Rom*_*mko 29 ajax jquery json

我试图使用GET方法发送一个json对象.我的代码:

$.ajax({
           url: "/api/endpoint",
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...
Run Code Online (Sandbox Code Playgroud)

但是,收到的标题将"Content-Length"设置为零,因此服务器上的json解析器不会读取内容.

我已经尝试过设置内容长度标题,但它仍然以0为单位来到服务器:

$.ajax({
           url: "/api/endpoint",
           headers: {"CONTENT_LENGTH",JSON.stringify({"sort":"date"}).length},
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...
Run Code Online (Sandbox Code Playgroud)

知道如何让这个工作吗?它必须得到GET请求.

Ber*_*rgi 32

GET请求(至少通常)没有消息体.正如文档中所提到,jQuery将datagET请求附加到url参数.您应该能够sort从服务器应用程序中读取参数.

顺便说一句,没有用户代理允许你设置Content-Length标题 - 它将(并且必须)根据发送的数据自动完成.


Ult*_*nct 22

有几个地方你有点不对劲.

  • 它不是CONTENT_LENGTH,它的Content-Length.
  • 不要设置Content-Length标题,浏览器会为你做.
  • 获取请求的content-length = 0.

像下面这样的东西应该适合你:

$.ajax({
     url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})),
     type: "GET",
     ...
});
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为你应该在URL中使用JSON.stringify作为GET参数,如下所示:

$.ajax({
           url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}),
           type: "GET",
           contentType: "application/json",
           dataType: "json",
           ...
Run Code Online (Sandbox Code Playgroud)

  • -1:JSON.stringify可能有一个"&",它会破坏请求.另外,为什么要使用contentType? (3认同)
  • 我试过这个并使用contentType:"application/json",dataType:"json",当你使用json.stringify()时会破坏它们,将它们拿出来并繁荣,它的工作原理. (3认同)