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 相关文章推荐
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
js 链式延迟执行DOME
Jan 04 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
js indexOf()定义和用法
Oct 21 Javascript
pace.js页面加载进度条插件
Sep 29 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
jQuery改变form表单的action,并进行提交的实现代码
May 25 Javascript
jQuery each函数源码分析
May 25 Javascript
javascript中的后退和刷新实现方法
Nov 10 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 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
使用数据库保存session的方法
2006/10/09 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python代码过长的换行方法
2018/07/19 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
python定义类的简单用法
2020/07/24 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
数据库笔试题
2013/05/09 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
银行职业规划书范文
2013/12/28 职场文书
大学生作弊检讨书
2014/02/19 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
病房管理制度范本
2015/08/06 职场文书
python基础之错误和异常处理
2021/10/24 Python