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 克隆数组最简单的方法
Feb 12 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
Dec 21 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
详解Javascript继承的实现
Mar 25 Javascript
javascript学习指南之回调问题
Apr 23 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
vue数据响应式原理知识点总结
Feb 16 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 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
php 无极分类(递归)实现代码
2010/01/05 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
Vue中的字符串模板的使用
2018/05/17 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python中使用动态变量名的方法
2014/05/06 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
python实现移动木板小游戏
2020/10/09 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
婚礼新郎父母答谢词
2014/01/16 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
评先进个人材料
2014/12/29 职场文书
三峡导游词
2015/01/31 职场文书
个人德育工作总结
2015/03/05 职场文书
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server