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 相关文章推荐
学习ExtJS Panel常用方法
Oct 07 Javascript
浅谈javascript的数据类型检测
Jul 10 Javascript
JavaScript 原型链学习总结
Oct 29 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
Nov 12 Javascript
5个JavaScript经典面试题
Oct 13 Javascript
js中document.write的那点事
Dec 12 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
JS文件中加载jquery.js的实例代码
May 05 jQuery
通过实例解析js可枚举属性与不可枚举属性
Dec 02 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抓取页面与代码解析 推荐
2010/07/23 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
wxPython中文教程入门实例
2014/06/09 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
县优秀教师事迹材料
2014/01/31 职场文书
关于长城的导游词
2015/01/30 职场文书
世界环境日活动总结
2015/02/11 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python