JQuery,使用GET方法发送JSON对象
我试图使用GET方法发送一个json对象。 我的代码:
$.ajax({ url: "/api/endpoint", type: "GET", data: {"sort":"date"}, contentType: "application/json", dataType: "json", ...
但是,收到的标题将“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", ...
知道如何让这个工作吗? 它必须是GET请求。
GET请求( 至少通常 )没有消息体。 正如文档中所提到的 ,jQuery将GET请求的data
附加到url参数。 您应该可以从服务器应用程序中读取sort
参数。
顺便说一句,没有用户代理允许您设置Content-Length
标头 – 它将(并且必须)根据发送的数据自动完成。
有几个地方你有点不对劲。
- 它的
Content-Length
不是CONTENT_LENGTH
。 - 不要设置
Content-Length
标头,浏览器会为你做。 - 获取请求的content-length = 0。
像下面这样的东西应该适合你:
$.ajax({ url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})), type: "GET", ... });
我认为你应该在URL中使用JSON.stringify作为GET参数,如下所示:
$.ajax({ url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}), type: "GET", contentType: "application/json", dataType: "json", ...
正如Bergi所提到的,数据由jQuery.ajax()
转换为请求参数。 来自jQuery 1.7.2:
// Determine if request has content s.hasContent = !rnoContent.test( s.type ); --> false when s.type == "GET'
…
if ( !s.hasContent ) { // If data is available, append data to url if ( s.data ) { s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; // #9682: remove data so that it's not used in an eventual retry delete s.data; }