$.ajaxSetup 没有为 Get 请求设置内容类型

Posted

技术标签:

【中文标题】$.ajaxSetup 没有为 Get 请求设置内容类型【英文标题】:$.ajaxSetup does not set content type for Get requests 【发布时间】:2012-04-23 00:32:10 【问题描述】:

代码 1

$.ajax(url:"1.aspx/HelloWorld",type:"GET",dataType:"json",contentType:"application/json");

代码 2

$.ajaxSetup(
   contentType: "application/json",
   dataType: "json"
);

$.get("1.aspx/HelloWorld","",$.noop,"json");

Code1 有效地设置了content-typedatatype Code2 没有设置内容类型这是有意的还是我必须做 Voodoo 的东西才能使它工作?

【问题讨论】:

Jquery - How to make $.post() use contentType=application/json? 的可能重复项 代码 2 的 $.get 可以重写为 $.get(url),因为您没有传递数据或回调函数,并且由于 ajaxSetup,json 是默认的 dataType。 @Starx 大声笑这是Get 请求,而不是帖子。帖子确实很好用 @KevinB Content-Type 和 dataType 在这里意思一样吗?如果是,那么你说的是正确的。但我认为 content-Type 指定了请求中预期的数据的 mime 类型 @Deeptechtons 正确,但是如果您已经在 ajaxSetup 中将其定义为默认值,则在 $.get 中指定“json”是没有意义的。保持 ajaxSetup 不变,使用缩短的$.get(),结果应该是一样的。你用的是什么版本的jQuery? 【参考方案1】:

$.ajaxSetup 为大多数 ajax 请求保留默认选项,但自行发送 ajax 请求。

$.ajax 是发送请求的实际函数。


代码 1

它只是用综合方法$.ajax()发送一个GET Ajax请求

关于代码 2

在发送任何请求之前设置所有 ajax 请求的默认选项。然后当使用 $.get 发出实际请求时,不再需要定义此参数。


更新

这似乎是一个错误。当您发送没有任何数据的$.get 请求时会出现此类问题。检查here。您需要使用 firebug 或类似工具查看请求标头。

【讨论】:

但是,他的 $.get() 确实使用之前设置的默认值发送 ajax 请求。 @Starx 我知道并且我还提到标题具有误导性。在代码#2 代码拒绝设置 Content-Type 后阅读下面定义的问题,即使它在 ajaxsetup 中指定 @Deeptechtons,你是提问者,你怎么能说你的问题的标题具有误导性并且仍然没有解决它。 我在第 7517 行找到了,如果没有发送数据,则没有设置 contentType。同样,这不仅限于$.get() 在这个条件中,s.data && s.hasContent && s.contentType !== false || options.contentType 在我看来唯一有问题的部分是s.hasContent,其余部分在这种情况下是非常明显的。【参考方案2】:

我只想为 ajax 方法创建一个快速包装器。

$.myAjax = function(url,data)
    return $.ajax(
        contentType: "application/json",
        url: url,
        data: data || ,
        type: "GET",
        dataType: "json"
    );

// used with
$.myAjax("foobar.asp").done(function(data)
    console.log(data);
).fail(function()
    console.log(arguments);
);

标头未通过的原因是,如果未为给定请求指定 contentType 并且没有数据,则未设置 contentType。这可能是一个错误,因为 contentType 是在 ajaxSetup 中设置的,但我对此并不肯定。

【讨论】:

接受为答案,我真的很想感谢您对回答问题的毅力和奉献精神

以上是关于$.ajaxSetup 没有为 Get 请求设置内容类型的主要内容,如果未能解决你的问题,请参考以下文章

$.ajax()

AJAX

ajax函数说明

$.ajax()方法详解

Ajax参数详解

$.ajax()方法详解