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 表单的友好用户体现
Jan 07 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
Table冻结表头示例代码
Aug 20 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
Jan 12 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
vue+openlayers绘制省市边界线
Dec 24 Vue.js
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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
php中错误处理操作实例分析
2019/08/23 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
Php多进程实现代码
2018/05/07 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Pytorch释放显存占用方式
2020/01/13 Python
大一学生假期实习的自我评价
2013/10/12 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
高中生评语大全
2014/04/25 职场文书
运动会演讲稿50字
2014/08/25 职场文书
三方股东合作协议书
2014/10/28 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python