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

时间:2012-06-08 11:46:25

标签: jquery ajax json

我正在尝试使用GET方法发送json对象。我的代码:

$.ajax({
           url: "/api/endpoint",
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

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

我已经尝试过设置内容长度标题,但它仍然以零的形式出现在服务器上:

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

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

4 个答案:

答案 0 :(得分:32)

GET请求(at least usually)没有邮件正文。如the docs中所述,jQuery将data GET请求附加到url参数。您应该能够从服务器应用程序中读取sort参数。

BTW,没有用户代理允许您设置Content-Length标题 - 它将(并且必须)根据发送的数据自动完成。

答案 1 :(得分:22)

有些地方你有点不对劲。

  • 不是CONTENT_LENGTH,而是Content-Length
  • 请勿设置Content-Length标题,浏览器会为您执行此操作。
  • 获取请求的内容长度= 0。

以下内容适用于您:

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

答案 2 :(得分:5)

我认为你应该在URL中使用JSON.stringify作为GET参数:

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

答案 3 :(得分:3)

如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;
    }