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 相关文章推荐
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
JavaScript 学习笔记(十二) dom
Jan 21 Javascript
jquery怎样实现ajax联动框(一)
Mar 08 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
Feb 06 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
Sep 04 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
Nov 30 Javascript
12个提高JavaScript技能的概念(小结)
May 09 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 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
php 更新数据库中断的解决方法
2009/06/05 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
python 字典中取值的两种方法小结
2018/08/02 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
基于python实现高速视频传输程序
2019/05/05 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Django中提示消息messages的设置方式
2019/11/15 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
教师节商场活动方案
2014/02/13 职场文书
万年牢教学反思
2014/02/15 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
聘任通知书
2015/09/21 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL