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 相关文章推荐
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 Javascript
JS检测图片大小的实例
Aug 21 Javascript
javascript实现yield的方法
Nov 06 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
Mar 05 Javascript
AnjularJS中$scope和$rootScope的区别小结
Sep 18 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
Dec 28 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
如何基于viewport vm适配移动端页面
Nov 13 Javascript
js实现筛选功能
Nov 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
Zerg建筑一览
2020/03/14 星际争霸
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python的pygame安装教程详解
2020/02/10 Python
什么是python的函数体
2020/06/19 Python
Python如何进行时间处理
2020/08/06 Python
python+opencv实现车道线检测
2021/02/19 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
巴西在线鞋店:Shoestock
2017/10/28 全球购物
党课学习思想汇报
2014/01/02 职场文书
工作会议主持词
2014/03/17 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
教研处工作方案
2014/05/26 职场文书
反腐倡廉标语
2014/06/24 职场文书
人事主管岗位职责
2015/02/04 职场文书
五一劳动节慰问信
2015/02/14 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书