【问题标题】:ASP.NET Call webMethod via Ajax not workingASP.NET 通过 Ajax 调用 webMethod 不起作用
【发布时间】:2017-01-06 13:59:35
【问题描述】:

我一直在为学校开发一个项目,并且在该项目中我想通过客户端调用服务器方法(C# 方法)。我发现使用 jQuery 是更好的方法之一(因为 ajax)。我让它工作了,但一周或更长时间后它突然停止工作。我认为我对方法没有太大改变,除了名称。但我似乎无法弄清楚问题所在。 (我使用调试来检查该方法是否被调用,它似乎没有调用)。

我通过 Ajax 调用 WebMethod 的代码:

function callDatabase() {
    $.ajax({
        type: 'POST',
        url: 'Index.aspx/setGridData',
        data: '{ }',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (msg) {
            alert(msg);
        }
    });
}

我在 Stackoverflow 上找到了这段代码。

然后我用这个作为我的方法:

[WebMethod]
    public static void setGridData() {
        string data = "Test";

        if (HttpContext.Current.Session["UserID"] != null) {
            MySqlCommand command = new MySqlCommand("UPDATE userdata SET griddata = ? WHERE userid = ?;");
            command.Parameters.Add(new MySqlParameter("griddata", data));
            command.Parameters.Add(new MySqlParameter("userid", HttpContext.Current.Session["UserID"].ToString()));
            MySqlDataReader reader = Global.SqlConnection.executeSQLCommand(command);

            if (reader.RecordsAffected <= 0) {
                reader.Close();
                command = new MySqlCommand("INSERT INTO userdata(userid, griddata) VALUES (?, ?);");
                command.Parameters.Add(new MySqlParameter("userid", HttpContext.Current.Session["UserID"].ToString()));
                command.Parameters.Add(new MySqlParameter("griddata", data));
                reader = Global.SqlConnection.executeSQLCommand(command);

                reader.Close();
            } else {
                reader.Close();

            }
        }
    }

jQuery 位于名为“JavaScript”的文件夹中,而 WebMethod 位于该文件夹之外,如果有帮助的话。

我希望有人可以帮助我。

【问题讨论】:

  • 是否进入后端方法? ..如果你在后端使用会话,你不需要把 [WebMethod(EnableSession=true)]
  • 还要检查后端页面的路径...(从服务器的根目录考虑)
  • @federicoscamuzzi 没有进入后端方法号。我刚试过用[WebMethod(EnableSession = true)]的版本还是不行。
  • 您能在浏览器控制台中看到任何错误吗?还要检查 ajax 调用的响应代码。是404还是别的什么。在浏览器的开发者控制台的网络标签中检查这个。
  • 检查后端 uri 的路径 ..也许尝试类似:url: './Index.aspx/setGridData',

标签: jquery asp.net ajax webmethod


【解决方案1】:

在连接到数据库之前,您需要确保 WebMethod 正常工作。

这是工作示例 - 客户端发送 user 对象,服务器将其返回。

ASPX

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="DemoWebApplication.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <button type="button" onclick="postData();">Post Data</button>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
        </script>
        <script type="text/javascript">
            function postData() {
                var user = { firstName: "John", lastName: "Doe" };
                $.ajax({
                    type: "POST",
                    url: '<%= ResolveUrl("~/default.aspx/postjson") %>',
                    data: "{user:" + JSON.stringify(user) + "}",
                    contentType: "application/json",
                    success: function (msg) {
                        console.log(msg.d);
                    }
                });
            }
        </script>
    </form>
</body>
</html>

代码隐藏

using System.Web.Script.Serialization;

namespace DemoWebApplication
{
    public partial class Default : System.Web.UI.Page
    {
        [System.Web.Services.WebMethod]
        public static string PostJson(User user)
        {
            user.FirstName += "Test";
            user.LastName += "Test";
            return new JavaScriptSerializer().Serialize(user);
        }
    }

    public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多