ASP.net JSON Webservice响应类型的问题

时间:2009-04-03 05:00:30

标签: asp.net jquery web-services json asmx

我正在尝试编写一个将由jQuery AJAX调用使用的ASP.net Web服务。 我绝对想要让它发挥作用。我在网上看过很多类似的问题,但我找不到合适的解决方案。

当我尝试进行ajax调用(通过jquery)时,我从服务器获得了成功的响应,但由于解析器错误,请求失败。

我已经验证了webservice返回的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设置中,内容Type设置为“application / json; charset = utf-8”,dataType设置为“json”。请求类型似乎是正确的,但响应始终是xml。

我可以通过删除dataType成功地发出请求,但我非常希望避免使用eval来反序列化数据。

如果有人有任何建议,我将不胜感激。我已经把头发拉了几天了。


JAVASCRIPT

(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

<%@ WebService Language="VB" Class="SpeciesService" %>

导入System.Web Imports System.Web.Services Imports System.Web.Services.Protocols 进口物种 Imports System.Runtime.Serialization

'要允许使用ASP.NET AJAX从脚本调用此Web Service,请取消注释以下行。 '_

_  _ Public Class SpeciesService

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

结束班

4 个答案:

答案 0 :(得分:2)

尝试使用JQuery发布虚拟json数据,如下所示:

$.ajaxSetup({
    type: "POST",
    data : "{'foo':'bar'}"
...

答案 1 :(得分:1)

这更像提示而不是答案 - 我一直在使用PageMethods而不是webservices,而且效果非常好。如果遇到同样的问题,我会试试。

答案 2 :(得分:1)

如果你看到标题是否有内容长度发送? IIS需要帖子上的内容长度,因此即使在帖子中添加空主体也可能会修复它。

我认为它与设置为json的数据类型一起工作的原因是jquery在这种情况下为你添加了一个空的帖子体。

答案 3 :(得分:0)

好的 - 非常感谢你们的帮助。 缺乏虚拟数据是问题的核心。当我在它导致服务器错误之前尝试添加它时,我转向其他东西。

我甚至无法弄清楚是什么修复了问题的服务器错误部分。我只是花了十分钟心不在焉地弄乱语法(修正缩进,上限,评论)因为我太沮丧而无法专注于手头的问题。我刷新了页面,突然之间工作正常。所以答案是发布虚拟数据并修复随机神秘语法错误。

无论如何,我不能够感谢你让我回到正轨。