javascript - ASP.NET VB WebService 请求出现 AJAX 500 错误

标签 javascript jquery asp.net ajax vb.net

我正在尝试在 VB ASP.NET 页面上运行 AJAX Webservice 请求。

加载页面时,我尝试调用 Web 服务,但在控制台中收到 500 错误。

我的 WebService 文件如下所示:

<System.Web.Script.Services.ScriptService()>
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")>
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
<ToolboxItem(False)>
Public Class usrDataSave
    Inherits System.Web.Services.WebService
    <WebMethod()>
    Public Function saydata(abc As String)
        MsgBox(abc)
        Return abc

    End Function

我的 ASP.NET 页面如下所示:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script> 
    <script type="text/javascript">  
    $(document).ready(function() {  
        $.ajax({  
            type: "POST",  
            url: "usrDataSave.asmx/saydata",
            data: "hello_world",  
            contentType: "application/json",  
            datatype: "json",  
            success: function(responseFromServer) {  
                alert(responseFromServer.d)  
            }  
        });  
    });  
    </script> 

    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
    </form>
</body>
</html>

我希望加载页面并弹出一个消息框,服务器端显示“hello_world”,并且网络浏览器创建一个弹出窗口,显示相同的内容。但是,这并没有发生,因为我收到了 500 错误。

我尝试通过使用不同版本的 jQuery 以及在 web.config 文件中启用请求来解决此问题,如下所示:

 <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>

这不起作用,我仍然在网络浏览器控制台中看到“服务器响应状态为 500”。应用程序的调试控制台中没有记录任何错误。

我该如何解决这个问题?

最佳答案

好的,假设两个页面都在同一个文件夹中 - 处于同一级别?

那么这应该可以工作:

   <script type="text/javascript">  
       $(document).ready(function () {
           $.ajax({
               type: "POST",
               url: usrDataSave.asmx/saydata
               data: "{abc: 'hello_world'}",
               contentType: "application/json",
               datatype: "json",
               success: function (responseFromServer) {
                   alert(responseFromServer.d)
               }
           });
       });
   </script> 

注意您的数据必须如何匹配您的参数..

所以,假设你有这个:

<WebMethod()>
Public Function saydata(abc As String, def as string) as string
    MsgBox(abc)
    Return abc & " " & def

End Function

并注意我们如何将函数设置为字符串 - 您应该为函数指定一个类型 - 在本例中为“字符串”。

   <script type="text/javascript">  
       $(document).ready(function () {
           $.ajax({
               type: "POST",
               url: "WebService1.asmx/saydata",
               data: "{abc: 'hello', def: 'world'}",
               contentType: "application/json",
               datatype: "json",
               success: function (responseFromServer) {
                   alert(responseFromServer.d)
               }
           });
       });
   </script> 

编辑:

后续问题是如何返回多个值?

那么,最简​​单的方法是什么?创建一个结构或类 - 让内置序列化将其转换为 json 字符串。

所以我们的网络方法可以说是这样的:

Structure Hotel
    Dim FirstName As String
    Dim LastName As String
    Dim HotelName As String
End Structure

<WebMethod()>
Public Function GetHotel() As Hotel

    Dim MyHotel As New Hotel
    MyHotel.FirstName = "Albert"
    MyHotel.LastName = "Kallal"
    MyHotel.HotelName = "Banff Springs Hotel"

    Return MyHotel

End Function

我经常使用结构体来代替类 - 从那以后我只是按照上面的方法将它推到我的 Web 方法之前。

现在,让我们在页面上放置一个按钮 - 和 js 函数来调用它:

例如:

        <asp:Button ID="cmdHotel" runat="server" Text="Get Hotel"
            OnClientClick="GetHotel();return false;"  />
        <script>
           function GetHotel() {
               $.ajax({
                   type: "POST",
                   url: "WebService1.asmx/GetHotel",
                   data: "{}",
                   contentType: "application/json",
                   datatype: "json",
                   success: function (r) {
                       s = "FirstName = " + r.d.FirstName + "\n"
                       s = s + "LastName = " + r.d.LastName + "\n"
                       s = s + "Hotel Name  = " + r.d.HotelName
                       alert(s)
                   }
               });
            }

当我们运行时,我们得到/看到这个:

enter image description here

因此,您通常可以只返回一个简单的字符串。但是,如果您创建一个结构服务器端,那么您可以按照上面的方式将结果客户端作为 js 对象引用。

关于javascript - ASP.NET VB WebService 请求出现 AJAX 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70491570/

相关文章:

javascript - Dropzone.js 如何使用 TR 或 TBODY 作为预览模板?

javascript - Angular JS 文件上传和 Laravel 后端

asp.net - MVC Contrib Grid 是 Asp.Net MVC 2.0 的一部分吗?

asp.net - 在 ASP.Net 中编写自定义 NTLM 质询/响应

javascript - 从 NodeJS 返回二进制数据

javascript - JS中带有随机数的时间戳

jquery 功能和文档就绪

Asp.Net MVC5 - Html.Action - 属性路由 - 导致异常的奇怪行为

javascript - Angularjs中带有按钮的可扩展div

javascript - 回调访问数据