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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
Jul 25 Javascript
IE事件对象(The Internet Explorer Event Object)
Jun 27 Javascript
高性能JavaScript DOM编程(1)
Aug 11 Javascript
基于jquery实现全屏滚动效果
Nov 26 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 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
输出控制类
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
移动端界面的适配
2017/01/11 Javascript
javaScript基础详解
2017/01/19 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
django 自定义用户user模型的三种方法
2014/11/18 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
安全生产实施方案
2014/02/23 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
React如何创建组件
2021/06/27 Javascript
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android