【问题标题】:how to call aspx.vb method using ajax如何使用 ajax 调用 aspx.vb 方法
【发布时间】:2021-11-14 12:48:20
【问题描述】:

如何从 ajax 调用 vb.net 方法我将数组作为 ajax 中的参数发送,但它不起作用 这是ajax和javascript代码

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>   

        <script type="text/javascript">
                $("#Button1").click(function () {
                    var Years = document.getElementById("Options").querySelectorAll(".selected");
                   


                    $.ajax({
                        type: "POST",
                        url: "NewScenarioProfilePage.aspx/CalculateSum",
                        data: "{'yearvalue ':'" + Years  +  "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: OnSuccess,
                        failure: function (response) {
                     ' this alert didn't show 
                            alert(response.d);
                        }

                    });

                });

这是vb方法 P.s this yearvalue 如果超过 2 个值可能是一个数组,如果是一个值,它可能是一个整数变量

    <System.Web.Services.WebMethod()>
 
 Public Shared Function CalculateSum(ByVal yearvalue as Integer) As String
        MsgBox("calculate sum")

        Dim Result As Integer = yearvalue 
        Return Result.ToString()
    End Function

并且 msgbox 不会触发。 我不知道问题是什么。 这是我点击按钮时检查中的错误

jquery.min.js:4 POST https://localhost:44351/NewScenarioProfilePage.aspx/CalculateSum 401
send    @   jquery.min.js:4
ajax    @   jquery.min.js:4
(anonymous) @   NewScenarioProfilePage:477
dispatch    @   jquery.min.js:3
r.handle    @   jquery.min.js:3

【问题讨论】:

  • MsgBox 不能用于网页。我使用 XMLhttpRequest 来触发 ashx 处理程序。

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


【解决方案1】:

您收到了 401 状态代码作为响应。因此,您可能缺少身份验证机制。

【讨论】:

  • 我将设置匿名身份验证设置为应用程序池标识。从这里 IIS -> 身份验证 -> 将匿名身份验证设置为应用程序池标识。仍然有同样的错误!
【解决方案2】:

嗯,我认为你需要删除服务器端的 msgbox - 它会很长时间搞砸,因为 ajax 调用是异步的。

试试这个例子:

让我们放入两个文本框,一个按钮,然后从第一个文本框中获取值,通过函数运行它(例如,为了好玩,乘以 2)。

所以我们有这个服务器代码:

<System.Web.Services.WebMethod()>
Public Shared Function CalculateSum(ByVal yearvalue As Integer) As String

    Debug.Print("cal sum run!!")

    Dim Result As Integer = yearvalue * 2

    Return Result.ToString()

End Function

对于客户端呢?让我们不只是让 js 代码“坐”在那里 - 让我们调用一个例程,然后发布。

所以让我们加入一个标准的 asp.net 按钮 - 但请注意我们如何只使用该按钮 (onClientClick) 调用客户端代码。我们使用 return false 所以按钮不会回发。

    <div>
        Enter year:
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        <br />
        <asp:Button ID="Button1" runat="server" Text="Test Ajax call"
            OnClientClick="mytest();return false"/>
        <br />
        Result ajax from server: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </div>

    <script>
        function mytest() {

            myyear = $('#TextBox1').val()

            $.ajax({
                type: "POST",
                url: "AjaxTestFun.aspx/CalculateSum",
                data: JSON.stringify({ yearvalue: myyear }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (rData) {
                    // put results send back into TextBox2
                    $('#TextBox2').val("Result from server = " + rData.d)
                },
                failure: function (rData) {
                    alert("error " + rData.d);
                }
            });
        }

    </script>

所以,输出现在看起来像这样:

所以,我使用了 debug.print。使用该日志或控制台日志,因为当您开始使用 ajax 调用时,服务器端的 msgbox 通常会伤害您。

如果当前网页工作正常,那么在 web 方法中折腾也可以工作(这不是身份验证问题)。

我还使用了 JSON.stringify。它“假定”第一个值是文本,第二个值可以是我使用的变量,例如 mymyear,或者您可以在引号下使用 '12335'。

因此,stringify 真的可以帮助世界贫困和苦难,因为您不必尝试连接一堆变量,以及一大堆单引号或双引号。

【讨论】:

  • 谢谢我试过了,但还是有这个错误Failed to load resource: the server responded with a status of 404 () jquery.min.js:2 POST https://localhost:44351/AjaxTestFun.aspx/CalculateSum 404 send @ jquery.min.js:2 ajax @ jquery.min.js:2 mytest @ NewScenarioProfilePage:478 onclick @ NewScenarioProfilePage:233
  • 是否有任何标准按钮表示您放到页面上的测试有效?这个web方法是在网页上,还是分开的?此外,当页面第一次加载时,按 ctrl-F5 强制重新加载浏览器缓存 - 由于缓存的 js 代码,我吹了一个下午。我假设 jQuery 正在工作?
  • 嗯,您必须将 AjaxTestfun 更改为您的页面名称?也许您的页面名称不同? - 也许你创建了一个新的,但它确实需要你创建的网页的名称。
  • 是的,我改了,但还是不行!
  • 删除一个标准的 asp.net 按钮并在后面的代码中说一个 debug.print 是否有效?您是否尝试过在 web 方法例程中设置断点?那样有用吗?创建一个新的空白 Web 测试页。我在此处发布的示例有效吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2015-05-19
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多