簡體   English   中英

在vb.net代碼隱藏文件中未調用WebMethod

[英]WebMethod does not get called in vb.net codebehind file

我使用.NET 2.0在文件default.aspx.vb中具有以下頁面方法:

<WebMethod()> _
Public Shared Function GetStatisticData(ByVal userId As Integer) As JavaScriptSerializer
    Dim stats As JavaScriptSerializer = New JavaScriptSerializer()

    stats.Serialize(statBiz.GetAllSaleStatistics(userId))

    Return stats
End Function

並在default.aspx中

opt.ajax({
    type: "POST",
    url: 'default.aspx/GetStatisticData',
    data: "{userId: 6601}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log(data);
    },
    error: function (request, status, error, response) {
        console.log(error);
    }
});

但是代碼隱藏文件中的方法永遠不會被命中,並且我從控制台日志中得到了這個錯誤:

SyntaxError: Unexpected token < in JSON at position 2
    at JSON.parse (<anonymous>)
    at n.parseJSON (jquery-1.12.4.min.js:11)
    at Xb (jquery-1.12.4.min.js:11)
    at y (jquery-1.12.4.min.js:11)
    at XMLHttpRequest.c (jquery-1.12.4.min.js:11)

有人可以告訴我我在這里想念什么嗎?

有人可以告訴我我在這里想念什么嗎?

對於初學者,您的返回類型應為statBiz.GetAllSaleStatistics的返回類型,並應返回該調用的結果。 當Framework能夠根據請求標頭確定要向上旋轉的序列化器時,您不需要自己旋轉一個序列化器,也不需要綁定返回JSON。 您當然不應該嘗試返回JavaScriptSerializer

此示例代碼和輸出應說明為什么返回序列化器不起作用:

Dim js = New JavaScriptSerializer()
js.Serialize(New List(Of Int32) From { 1, 2, 3})
Console.WriteLine(New JavaScriptSerializer().Serialize(js))

{ “MaxJsonLength”:2097152, “RecursionLimit”:100}

那不是序列化的列表! 這是一個序列化的序列化器!


出於說明目的,假設statBiz.GetAllSaleStatistics(userId)返回SaleStatistics類的實例。 請嘗試以下操作,但當然用您的實際類型替換SaleStatistics

<WebMethod()> _
Public Shared Function GetStatisticData(ByVal userId As Integer) As SaleStatistics
    Return statBiz.GetAllSaleStatistics(userId)
End Function

這本身可能不會完全解決您的問題。 我懷疑您的方法正在返回XML,並且作為舊版應用程序,web.config中可能缺少條目 您可能還需要定位.NET Framework 3.5。

Web方法是由Web服務而非Web應用程序使用的。 您將Web服務安裝在服務器上,然后將Web服務添加為服務,然后在代碼中調用(SOAP)Web服務。 Web服務文件的擴展名是.asmx。 Web服務是過時的(.NET Framwork 2.0到3.5),大多數人都使用RESTful api。 要創建Web服務,請轉到文件->新建-> Asp.Net空Web應用程序。 右鍵單擊->添加新項目-> webservice模板。

現在,如果您不喜歡該答案,但仍想使用代碼, webmethod_從代碼中刪除webmethod_ ,然后在javascript中,可以使用'<%= GetStatisticData(SomeVariableStoringUserID) %>'將調用結果分配給變量您要查詢的用戶ID。

更新:至少可以說,我似乎落后於時代。 因此,在這種情況下,@ Stephen Kennedy的回答似乎是正確的。 當我認為您期望使用json文檔時,您的方法將返回JavaScriptSerializer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM