经过尝试,只需要在$.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.
推荐阅读
iframe 异步加载技术及性能分析
这是一篇原创翻译文章。原文地址。
我们会经常使用iframes来加载第三方的内容、广告或者插件。使用iframe是因为他可以和主页面并行加载,不会阻塞主页面。当然使用iframe也是有利有弊的:Steve Souders在他的blog>>>详细阅读
本文标题:jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
地址:http://www.17bianji.com/kaifa2/JS/24365.html
1/2 1