ASP.net JSON Webservice 响应类型的问题
Posted
技术标签:
【中文标题】ASP.net JSON Webservice 响应类型的问题【英文标题】:Problems with ASP.net JSON Webservice response type 【发布时间】:2010-10-17 06:58:18 【问题描述】:我正在尝试编写一个 jQuery AJAX 调用将使用的 ASP.net Web 服务。 我完全无计可施,试图让它发挥作用。我在网上看到了许多类似的问题,但我一直无法找到适合的解决方案。
当我尝试进行 ajax 调用(通过 jquery)时,我从服务器获得了成功的响应,但由于解析器错误,请求失败。
我已经验证了 web 服务返回的 json 并且它是有效的。问题似乎源于 asp.net 将 json 对象作为 xml 返回。
我已使用
将返回类型指定为 json<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
我添加了以下 http 处理程序,因为它被提及为潜在的修复
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false" />
</httpHandlers>
在我的 jquery ajax 设置中,内容类型设置为“application/json; charset=utf-8”,数据类型设置为“json”。请求类型似乎是正确的,但响应始终是 xml。
我可以通过删除 dataType 成功发出请求,但我非常希望避免使用 eval 来反序列化数据。
如果有人有任何建议,我将不胜感激。这几天我一直在拔头发。
(function($)
$.ajaxSetup(
type: "POST",
contentType: "application/json; charset=utf-8",
global: false,
dataType: "json"
);
function auto()
console.log("test");
return;
;
$.fn.species =
test: function()
alert("test");
,
load: function() //load and attach species list to element as dropdown
$.ajax(
url: "SpeciesService.asmx/List",
success: function(msg)
console.log(msg);
,
error: function(xhr, desc, exceptionobj)
console.log(xhr.responseText);
console.log(desc);
console.log(exceptionobj);
);
return this;
; //Species Block
)(jQuery); //jQuery Alias Block
ASP.NET 网络服务
<%@ WebService Language="VB" Class="SpeciesService" %>
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports Species
Imports System.Runtime.Serialization
' 要允许使用 ASP.NET AJAX 从脚本调用此 Web 服务,请取消注释以下行。 '_
_ _ 公共类物种服务
Inherits System.Web.Services.WebService
<WebMethod()> _
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
Public Function Data(ByVal id As Integer) As String
Dim curSpecies As New Species(id)
Return curSpecies.serialize
End Function
<WebMethod()> _
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
Public Function List() As String
Return Species.list()
End Function
结束类
【问题讨论】:
【参考方案1】:尝试使用 JQuery 发布一个虚拟的 json 数据,如下所示:
$.ajaxSetup(
type: "POST",
data : "'foo':'bar'"
...
【讨论】:
我相信这个问题已在 jQuery 1.4.x 中得到修复。在 jQuery 1.3.x 中,您只需要一个数据:''。 Any 数据将强制 jQuery 设置内容类型;合法的键和值不是必需的。【参考方案2】:这更多的是提示而不是答案 - 我一直在使用 PageMethods 而不是 webservices,它工作得很好。如果遇到同样的问题,我会尝试。
【讨论】:
【参考方案3】:如果您查看标头,是否正在发送内容长度? IIS 需要帖子的内容长度,因此即使在帖子中添加空正文也可能会修复它。
我认为它与设置为 json 的数据类型一起工作的原因是 jquery 在这种情况下为您添加了一个空的帖子正文。
【讨论】:
【参考方案4】:好的 - 非常感谢你们的帮助。 缺乏虚拟数据是问题的核心。当我尝试在它导致服务器错误之前添加它并转移到其他东西时。
我什至无法弄清楚是什么解决了问题的服务器错误部分。我只是花了十分钟心不在焉地弄乱语法(修复缩进、大写、cmets),因为我太沮丧了,无法专注于手头的问题。我刷新了页面,突然它工作正常了。所以答案是发布虚拟数据并修复随机神秘语法错误。
无论如何,我不能感谢你让我回到正确的轨道上。
【讨论】:
以上是关于ASP.net JSON Webservice 响应类型的问题的主要内容,如果未能解决你的问题,请参考以下文章
ASP.net JSON Webservice 响应类型的问题
如何在 c# ASP.Net 中使用有效的 JSON 输出创建 JSON WebService 并使用 JQuery/Ajax 进行查询
ASP.net jQuery调用webservice返回json数据的一些问题
ASP.NET WebService 仅在使用 Http Get 但 web.config 设置正确时错误地返回 XML 而不是 JSON