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 相关文章推荐
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
理解javascript中的原型和原型链
Jul 30 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 Javascript
json数据处理及数据绑定
Jan 25 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
JS字符串去除连续或全部重复字符的实例
Mar 08 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
vscode下的vue文件格式化问题
Nov 28 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代码
2007/03/03 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP xpath()函数讲解
2019/02/11 PHP
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
require.js中的define函数详解
2017/07/10 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
给校长的建议书300字
2014/05/16 职场文书
室内趣味活动方案
2014/08/24 职场文书
运动与健康自我评价
2015/03/09 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
用JS实现飞机大战小游戏
2021/06/09 Javascript