【问题标题】:JQuery-Ajax doesn't call code behind VB.NETJQuery-Ajax 不调用 VB.NET 后面的代码
【发布时间】:2014-12-30 15:56:12
【问题描述】:

我有以下问题: 我想从后面的代码中调用 AktualisiereSilomethode,它应该返回一个字符串列表,但我得到的只是一个错误。 好像ajax方法没有调用后面的代码,但我不知道为什么。 我会很幸运能得到一些帮助。 如果您需要更多信息或更多代码,请写信给我。

我的代码: 1.ajax.js

//GET-Abfrage der Silos
function GetSiloListe() {
    alert("In AJAX Aufruf");
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Karte.aspx/AktualisiereSilo",
        //data: "{}", (changed it)
        dataType: "json",
        success:function (data, textStatus, jQxhr) { alert("Success " + data); },
        error: function (textStatus, errorThrown) { alert("Status: " + textStatus); alert("Error: " + errorThrown); },
    });
}
  1. 我在 scripttag 中调用 karte.aspx

函数筒仓更新(){ GetSiloListe(); }

  1. 我的代码背后 (karte.aspx.vb)

<WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)>
     Public Shared Function AktualisiereSilo() As String
        Dim siloModel As SiloModell = New SiloModell
        Dim siloList As List(Of SiloModell) = New List(Of SiloModell)
        Dim Datab As Database = New Database
        Dim list As String = ""
        Datab.InitializeDatabase()
        siloList = Datab.siloListQuery()

        For Each el In siloList
            list = list + el.longitude + "/" + el.latitude + ";"
        Next
        Return list
    End Function

【问题讨论】:

  • 你需要为你的AktualisiereSilo方法添加WebMethod属性,并制作static'. also you need to access the data in you success method using data.d`方法,因为asp.net将数据封装在变量d

标签: jquery asp.net ajax json vb.net


【解决方案1】:

如果您不发送任何内容,则无需添加数据

function GetSiloListe() {
    alert("In AJAX Aufruf");
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Karte.aspx/AktualisiereSilo",

        dataType: "json",
        success:function (data, textStatus, jQxhr) { alert("Success " + data); },
        error: function (textStatus, errorThrown) { alert("Status: " + textStatus); alert("Error: " + errorThrown); },
    });
}

在你的 VB 中像这样改变它

<WebMethod()>
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)>
Public Shared Function AktualisiereSilo() As String
        Dim siloModel As SiloModell = New SiloModell
        Dim siloList As List(Of SiloModell) = New List(Of SiloModell)
        Dim Datab As Database = New Database
        Dim list As String = ""
        Datab.InitializeDatabase()
        siloList = Datab.siloListQuery()

        For Each el In siloList
            list = list + el.longitude + "/" + el.latitude + ";"
        Next
        Return list
    End Function

【讨论】:

  • 谢谢,我改了。但现在我只是得到一个错误。如果我只是将我的 ajaxfunction 更改为类型、url、成功和错误,我会得到看起来像我的 Karte.aspx 的 html/scripttext。
  • 好的,请在函数的最开始放置一个调试器,并首先测试您是否能够点击调试器
  • 谢谢,我把调试器放在函数的开头,调试器没有命中。也许它有问题,因为我正在使用 WebForms?这是我第一次使用 ajax、jquery 和 VB.NET...
【解决方案2】:
Imports System.Web.Services

<WebMethod()> _
 Public Shared Function AktualisiereSilo() As String
        Dim siloModel As SiloModell = New SiloModell
        Dim siloList As List(Of SiloModell) = New List(Of SiloModell)
        Dim Datab As Database = New Database
        Dim list As String = ""
        Datab.InitializeDatabase()
        siloList = Datab.siloListQuery()
        For Each el In siloList
            list = list + el.longitude + "/" + el.latitude + ";"
        Next
        Return list
End Function

因为您的数据类型是 Json。
(数据类型:“json”)
所以试试这个来获取值。

Public Shared Function AktualisiereSilo() As String
        'Json string
        Return "[{ ""name"": ""guest01"", ""age"": ""29"", ""height"": ""7"" }]"
End Function

function GetSiloListe() {
    alert("In AJAX Aufruf");
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Default.aspx/AktualisiereSilo",
        dataType: "json",
        success:function (data, textStatus, jQxhr) {
        var data = $.parseJSON(data.d);
        var numOfData = data.length; 
        for (var i = 0; i < numOfData; i++) {
              alert(data[i]["name"]);   
              alert(data[i]["age"]);    
              alert(data[i]["height"]); 
        }
        },
        error: function (textStatus, errorThrown) { alert("Status: " + textStatus); alert("Error: " + errorThrown); },
    });
}

您需要确保字符串返回格式是 json 类型。

Imports System.Web.Services

<WebMethod()> _
 Public Shared Function AktualisiereSilo() As String
        Dim siloModel As SiloModell = New SiloModell
        Dim siloList As List(Of SiloModell) = New List(Of SiloModell)
        Dim Datab As Database = New Database
        Dim list As String = ""
        Datab.InitializeDatabase()
        siloList = Datab.siloListQuery()
        For Each el In siloList
            list = list + el.longitude + "/" + el.latitude + ";"
        Next
        Return list
End Function

【讨论】:

  • 好的,我已经尝试过了,但它不起作用。我只是收到错误消息而不是数据。
【解决方案3】:

您必须将 WebMethod 添加到您的方法中才能在 http 响应中获得所需的结果。当您调用Karte.aspx 时,它会经历here 描述的完整生命周期。

通过this 和这个,我希望它能清除你的概念。

如果你不想要webmethod,你可以使用this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2013-06-13
    • 2021-05-12
    相关资源
    最近更新 更多