繁体   English   中英

对 ASP.NET WebMethod 的 Ajax 调用未命中服务器端方法

[英]Ajax call to ASP.NET WebMethod not hitting server side method

我正在尝试将单个参数传递给我后面的代码。 我正在达到 ajax 的成功结束,但我的 aspx.cs 代码中的方法没有被调用。 如果它有所作为,我正在使用主文件。

Javascript:

$(document).ready(function () {
    var someID = "";
    $('.glyphicon-trash').click(function () {
        $.ajax({
            type: "POST",
            url: "fileName.aspx/deleteSomething",
            data: "{'deleteSomeID':'" + someID + "'}", // someID is assigned to a value by another button
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                alert("success"); // this alert works.
            }
        });
    });
});

文件名.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{ 
    //... stuff here
}

[WebMethod]
public static void deleteSomething(string deleteSomeID)
{
    MySqlDbUtilities db = new MySqlDbUtilities();
    MySqlCommand cmd;
    string sql = "DELETE FROM Targets WHERE targetID = @someID";
    cmd = db.GetCommand(sql);

    cmd.Parameters.AddWithValue("@someID", deleteSomeID);

    cmd.ExecuteNonQuery();
    db.Dispose();
}

单击页面上的按钮时,会填充“someID”。 那工作正常,我检查了三次。 然而,该方法没有做任何事情。 也不知道有没有达到。 有任何想法吗?

您的数据:param 在我看来是错误的。 你不需要它是一个字符串。

更新:你说你击中了成功处理程序 - 只是为了完整性,你可以添加这个错误处理程序并仔细检查它没有被击中吗?

$(document).ready(function () {
 var someID = "";
        $('.glyphicon-trash').click(function () {
            $.ajax({
                type: "POST",
                url: "fileName.aspx/deleteSomething",
                data: { deleteSomeID: someID },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    alert("success"); // this alert works.
                },
                error: function (xhr, status, text) {
                  console.log(xhr.status);
                  console.log(xhr.text);
                  console.log(xhr.responseText);
                 }
            });
        });

我更习惯于 MVC,所以我不能保证 JsonResult 在 webforms 中工作(如果不是,我会感到惊讶)。

更改您的 webmethod 以返回 JsonResult。

在您的代码中,声明一个 bool 设置为 false,并在您的 SQL 执行后将其设置为 true。 返回以下内容:

JsonResult returnObj = new JsonResult
        {
            Data = new
            {
                wasSuccessful = myBool,
            },
            ContentEncoding = System.Text.Encoding.UTF8,
            JsonRequestBehavior = JsonRequestBehavior.DenyGet
        };

        return Json(returnObj);

更改您的成功处理程序:

success: function (data) {
            console.log(data);
            alert(data.wasSuccessful);
        }

不要手动构建data参数,而是使用JSON.stringify进行适当的编码:

$.ajax({
    type: "POST",
    url: "fileName.aspx/deleteSomething",
    data: JSON.stringify({ deleteSomeID: someID }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        alert("success");
    }
});

此外,您可以处理您的查询可能引发异常的情况,并在您的 UI 中采取相应的行动,这是一种非常简单的方法:

[WebMethod]
public static string deleteSomething(string deleteSomeID)
{
    try {
        MySqlDbUtilities db = new MySqlDbUtilities();
        MySqlCommand cmd;
        string sql = "DELETE FROM Targets WHERE targetID = @someID";
        cmd = db.GetCommand(sql);

        cmd.Parameters.AddWithValue("@someID", deleteSomeID);

        cmd.ExecuteNonQuery();
        db.Dispose();
    } 
    catch (Exception e) {
        return e.Message;
    }

    return "1";
}

然后,在成功回调时管理响应:

$.ajax({
    type: "POST",
    url: "fileName.aspx/deleteSomething",
    data: JSON.stringify({ deleteSomeID: someID }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        if (response == "1") {
            alert("Successful deletion");
        } else {
            alert("Operation failed! Details: " + response);
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM