jQuery.get、jQuery.getJSON、jQuery.post無法返回JSON問題的解決方法
更新時間:2011年07月28日 00:08:15 作者:
在WEB項目中,經(jīng)常會使用到jQuery進行AJAX請求,但是自從使用了.net 3.5以后,以往寫的請求語句就有些小問題了,就是返回的始終是xml,而并不是JSON
經(jīng)過嘗試,只需要在$.ajax中加入 contentType: "application/json; charset=utf-8"選項就可以了,這是因為在.net 3.5以后要對contentType進行檢查,所以僅僅指定dataType的話.net就不會返回JSON了,那么我們的請求自然也就無法請求到JSON數(shù)據(jù)了。正確寫法就是這樣了:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.ajax({
type: "POST",
url: url,
data: '{userName:"'+userName+'"}',
dataType: "json",
success: function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
}
});
更正后代碼
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.ajax({
type: "POST",
url: url,
data: '{userName:"'+userName+'"}',
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
}
});
但是在使用$.get、$.getJSON、$.post時確怎么也得不到JSON數(shù)據(jù)了,寫法如下:
$.get代碼
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.get(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
},"json");
$.getJSON代碼
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.getJSON(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
});
$.post代碼
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.post(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
},'json');
用HttpWatch查看請求返回的數(shù)據(jù)如下:
<?xml version="1.0" encoding="utf-8"?>
<boolean xmlns="http://tempuri.org/">false</boolean>
看一下jQuery.extend中有關代碼:
jQuery.extend
jQuery.extend({
get: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = null;
}
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
},
getJSON: function( url, data, callback ) {
return jQuery.get(url, data, callback, "json");
},
post: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = {};
}
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
}
});
原因就是.net 3.5以后要對contentType進行檢查,如果不為json的話,就不會返回json,而get、getJSON、post擴展都再次調(diào)用了ajax,但是只傳了dataType參數(shù),.net 3.5在檢查contentType時發(fā)現(xiàn)其不是json,便返回了xml.
復制代碼 代碼如下:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.ajax({
type: "POST",
url: url,
data: '{userName:"'+userName+'"}',
dataType: "json",
success: function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
}
});
更正后代碼
復制代碼 代碼如下:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.ajax({
type: "POST",
url: url,
data: '{userName:"'+userName+'"}',
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
}
});
但是在使用$.get、$.getJSON、$.post時確怎么也得不到JSON數(shù)據(jù)了,寫法如下:
$.get代碼
復制代碼 代碼如下:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.get(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
},"json");
$.getJSON代碼
復制代碼 代碼如下:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.getJSON(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
});
$.post代碼
復制代碼 代碼如下:
var url = "/Services/AccountService.asmx/UserExists";
var userName = $("#txtUserName").val();
$.post(
url
, { userName: userName }
, function (json) {
if (json.d == true) {
$("#submit").removeAttr("disabled");
return;
}
$("#submit").attr("disabled", "disabled");
},'json');
用HttpWatch查看請求返回的數(shù)據(jù)如下:
復制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<boolean xmlns="http://tempuri.org/">false</boolean>
看一下jQuery.extend中有關代碼:
jQuery.extend
復制代碼 代碼如下:
jQuery.extend({
get: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = null;
}
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
},
getJSON: function( url, data, callback ) {
return jQuery.get(url, data, callback, "json");
},
post: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = {};
}
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
}
});
原因就是.net 3.5以后要對contentType進行檢查,如果不為json的話,就不會返回json,而get、getJSON、post擴展都再次調(diào)用了ajax,但是只傳了dataType參數(shù),.net 3.5在檢查contentType時發(fā)現(xiàn)其不是json,便返回了xml.
相關文章
jQueryPad 實用的jQuery測試工具(支持IE,chrome,FF)
這個jQueryPad也是我無意中在網(wǎng)上看頁面的時候看到的,下載下來試用了下,感覺很好,這個軟件是使用WPF開發(fā)的(不過不開源,需要安裝.NET Framework 3.5),整體界面很簡潔。2010-05-05
Jquery ajaxStart()與ajaxStop()方法(實例講解)
本篇文章主要是對Jquery中的ajaxStart()與ajaxStop()方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR錯誤
今天測試偶然發(fā)現(xiàn)jquery.bgiframe.js在IE9環(huán)境下提示錯誤,于是很是好奇,想辦法知道究竟,于是搜索了一下,現(xiàn)在與大家分享希望可以幫助你們2013-01-01
jQuery簡單實現(xiàn)的HTML頁面文本框模糊匹配查詢功能完整示例
這篇文章主要介紹了jQuery簡單實現(xiàn)的HTML頁面文本框模糊匹配查詢功能,涉及jQuery事件響應模擬列表框的下拉數(shù)據(jù)展示與隱藏,以及元素遍歷、匹配等相關操作技巧,需要的朋友可以參考下2018-05-05
EasyUI在Panel上動態(tài)添加LinkButton按鈕
Easyui的panel面板,在panel的面板中動態(tài)添加Linkbuton按鈕的編輯方法,下面把實現(xiàn)思路及代碼記錄到腳本之家平臺,供大家參考2017-08-08

