Ajax 调用 ASP.NET WebMethod 未访问服务器端方法
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" 被填充。这是正常工作,我三重检查。然而,该方法不执行任何操作。也不知道是不是达到了。有什么想法吗?
我觉得你的数据:参数不对。你不需要它是一个字符串。
更新:你说你击中了成功处理程序——为了完整起见,你能添加这个错误处理程序并仔细检查它没有被击中吗?
$(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 中工作(如果不是我会感到惊讶)。
将您的网络方法更改为 return JsonResult。
在您的代码中,将布尔值声明为 false,并在 SQL 执行后将其设置为 true。 Return 以下:
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);
}
}
});
我正在尝试将单个参数传递给我的代码。我已到达 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" 被填充。这是正常工作,我三重检查。然而,该方法不执行任何操作。也不知道是不是达到了。有什么想法吗?
我觉得你的数据:参数不对。你不需要它是一个字符串。
更新:你说你击中了成功处理程序——为了完整起见,你能添加这个错误处理程序并仔细检查它没有被击中吗?
$(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 中工作(如果不是我会感到惊讶)。
将您的网络方法更改为 return JsonResult。
在您的代码中,将布尔值声明为 false,并在 SQL 执行后将其设置为 true。 Return 以下:
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);
}
}
});