我们使用以下AjaxSetup:
$.ajaxSetup(
{
cache: false,
type: 'POST',
contentType: "application/json",
data: "{}",
headers: { "Accept": "application/json; charset=utf-8" },
beforeSend: function(jqXHR, options)
{
if ( options.contentType == "application/json" && typeof options.data != "string" )
options.data = JSON.stringify(options.data);
},
processData: false
});
我发送的帖子请求如下:
$.ajax(
{
url: '/url',
data: postData,
success: function(json)
{
}
})
我们使用ASP.NET,这些默认设置通常可以很好地工作。一切都自动同步到JSON,并在我们的ASP.NET管道中正确读取和模型化。
大约一千个用户似乎只有一个问题。他们的客户端发送POST
个请求而不是GET
请求。
UserAgent在Windows 7上提及Chrome 37.0.2062.120。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
这个客户端发送GET请求的原因是什么?
答案 0 :(得分:0)
Boolean
的预期回报typeof options.data != "string"
是多少?看来条件会返回false
? ;可能会向服务器发送一个空对象 - 即使在$.ajax()
包含了正确的对象
i.e.g,
尝试
var postData = {"def":789};
$.ajaxSetup(
{
cache: false,
type: 'POST',
contentType: "application/json",
data: "{}",
headers: { "Accept": "application/json; charset=utf-8" },
beforeSend: function(jqXHR, options)
{
if ( options.contentType == "application/json" && typeof options.data != "string" )
options.data = JSON.stringify(options.data);
console.log(typeof options.data
, typeof options.data != "string"
, typeof options.data !== "string") // `string` , `false`, `false`
},
processData: false
});
$.ajax("", postData);
如果某种方式将processData
选项更改为true
,则该请求将成为GET
请求,并可能返回error
。
在没有$.ajaxSetup()
data
包裹在引号中的情况下尝试,或者投标为string
?
由于beforeSend
会评估
data: "{}"
为string
并返回false
?
请参阅network
上的console
标签;其中postData
(对象,Request Payload
)呈现为{}
:无数据;没有数据发送到服务器。
请参阅http://api.jQuery.com/jquery.ajax
processData(默认值:true)类型:Boolean默认情况下,传入的数据 作为对象的数据选项(从技术上讲,除了一个以外的任何东西) string)将被处理并转换为查询字符串,拟合 到默认内容类型“application / x-www-form-urlencoded”。如果 要发送DOMDocument或其他未处理的数据,请设置此项 选项为false。