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 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
基于jquery实现的文字淡入淡出效果
Nov 14 Javascript
jQuery实现点击行选中或取消CheckBox的方法
Aug 01 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
浅谈箭头函数写法在ReactJs中的使用
Aug 22 Javascript
JavaScript反射与依赖注入实例详解
May 29 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
vuex分模块后,实现获取state的值
Jul 26 Javascript
js实现翻牌小游戏
Jul 31 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实现多级树型菜单
2006/10/09 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
javascript实现表单验证
2016/01/29 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
js实现录音上传功能
2019/11/22 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Python短信轰炸的代码
2020/03/25 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
办理信用卡工作证明
2014/01/11 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
画展邀请函
2015/01/31 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL