How to make $.post() use contentType=application/json?
I've noticed that when using $.post() in jquery that the default contentType is application/x-www-form-urlencoded - when my asp.net mvc code needs to have contentType=application/json
(See this question for why I must use application/json: ASPNET MVC - Why is ModelState.IsValid false "The x field is required" when that field does have a value?)
How can I make $.post() send contentType=application/json? I already have a large number of $.post() functions, so I don't want to change to $.ajax() because it would take too much time
If I try
$.post(url, data, function(), "json")
It still has contentType=application/x-www-form-urlencoded. So what exactly does the "json" param do if it does not change the contenttype to json?
If I try
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
});
That works but affects every single $.get and $.post that I have and causes some to break.
So is there some way that I can change the behavior of $.post() to send contentType=application/json?
I think you may have to
1.Modify the source to make $.post always use JSON data type as it really is just a shortcut for a pre configured $.ajax
call
Or
2. Define your own utility function that is a shortcut for the $.ajax
configuration you want to use
Or
3.You could overwrite the $.post function
with your own implementation via monkey patching.
The JSON datatype in your example refers to the datatype returned from the server and not the format sent to the server.
$.ajax({
url:url,
type:"POST",
data:data,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(){
...
}
})
请参阅:jQuery.ajax()
最后我找到了适合我的解决方案:
jQuery.ajax ({
url: myurl,
type: "POST",
data: JSON.stringify({data:"test"}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(){
//
}
});
链接地址: http://www.djcxy.com/p/8050.html