$.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-type
和datatype
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 请求设置内容类型的主要内容,如果未能解决你的问题,请参考以下文章