[英]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.