jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法


Posted in Javascript onJuly 28, 2011

经过尝试,只需要在$.ajax中加入 contentType: "application/json; charset=utf-8"选项就可以了,这是因为在.net 3.5以后要对contentType进行检查,所以仅仅指定dataType的话.net就不会返回JSON了,那么我们的请求自然也就无法请求到JSON数据了。正确写法就是这样了:

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数据了,写法如下:
$.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查看请求返回的数据如下:
<?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扩展都再次调用了ajax,但是只传了dataType参数,.net 3.5在检查contentType时发现其不是json,便返回了xml.
Javascript 相关文章推荐
JavaScript 对象、函数和继承
Jul 07 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
jquery和ajax的关系详细介绍
Nov 29 Javascript
js使用for循环查询数组中是否存在某个值
Aug 12 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
Jun 25 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
Jul 27 #Javascript
另一个javascript小测验(代码集合)
Jul 27 #Javascript
jsTree 基于JQuery的排序节点 Bug
Jul 26 #Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 #Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 #Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
Jul 26 #Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 #Javascript
You might like
使用无限生命期Session的方法
2006/10/09 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
React实践之Tree组件的使用方法
2017/09/30 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python with的用法
2014/08/22 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
法国体育用品商店:GO Sport
2019/10/23 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
数字天堂软件测试面试题
2012/12/23 面试题
三个Unix的命令面试题
2015/04/12 面试题
什么是servlet链?
2014/07/13 面试题
运动会班级口号
2014/06/09 职场文书
超市客服工作职责
2014/06/11 职场文书
建筑工地宣传标语
2014/06/18 职场文书
财务会计实训报告
2014/11/05 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
html form表单基础入门案例讲解
2021/07/15 HTML / CSS