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 相关文章推荐
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
Vue自定义指令详解
Jul 28 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
详解react关于事件绑定this的四种方式
Mar 09 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
小程序外卖订单界面的示例代码
Dec 30 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
vue使用watch监听属性变化
Apr 30 Vue.js
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
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php MsSql server时遇到的中文编码问题
2009/06/11 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
Python选课系统开发程序
2016/09/02 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python 实现A*算法的示例代码
2018/08/13 Python
python文件和文件夹复制函数
2020/02/07 Python
python time.strptime格式化实例详解
2021/02/03 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
大家检讨书5000字
2014/02/03 职场文书
火锅店的活动方案
2014/08/15 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书