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 浏览器检测代码精简版
Mar 04 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
js鼠标跟随运动效果
Mar 11 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
微信小程序连续签到7天积分获得功能的示例代码
Aug 20 Javascript
微信小程序自定义modal弹窗组件的方法详解
Dec 20 Javascript
JS封装cavans多种滤镜组件
Feb 15 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+Html+缓存
2006/12/20 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
angular.element方法汇总
2015/01/07 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
python匿名函数用法实例分析
2019/08/03 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
财会自我鉴定范文
2013/12/27 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
文明礼仪倡议书
2015/04/28 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书