如何通过 AJAX(本机 JS)调用 ASP.NET WebMethod
How to call an ASP.NET WebMethod via AJAX (Native JS)
有没有办法使用原生 JS 调用 WebMethod AJAX?
类似于:
$.ajax({
type: "POST",
url: "AssignAdditional_Equip.aspx/getEquipListing",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var result = JSON.parse(data.d);
console.log(result);
},
error: function (response) {
alert(response);
}
});
下面的代码是我的尝试:
var requestVar = new XMLHttpRequest();
requestVar.open('GET', 'AssignAdditional_Equip.aspx/getEquipListing');
requestVar.onload = function () {
if (requestVar.status === 200) {
console.log(requestVar.responseText);
}
else {
alert('Request failed. Returned status of ' + xhr.status);
}
};
requestVar.send();
编辑:这是我在代码隐藏上的 web 方法,以消除一些混乱
<WebMethod>
Public Shared Function getEquipListing()
Dim equipType_Options As New List(Of String)
Dim serializer As New JavaScriptSerializer
Dim sqlConn As New SqlConnection
Dim reader As SqlDataReader
sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings("ITSGinventory").ConnectionString
Dim sqlCmd As New SqlCommand("SELECT DISTINCT(Equipment_Type) FROM tbl_Equipments ORDER BY Equipment_Type ASC", sqlConn)
sqlConn.Open()
reader = sqlCmd.ExecuteReader
While reader.Read()
equipType_Options.Add(reader("Equipment_Type"))
End While
sqlConn.Close()
sqlConn.Dispose()
Return serializer.Serialize(equipType_Options)
End Function
网络方法应该return 序列化的字符串列表。使用 JQuery,它按预期工作。但是我的本机 AJAX 方法 return 是页面的 HTML 标记而不是字符串值。我做错了吗?
我认为您可以使用 fetch 函数和 json 方法从 http 响应中提取。很好地解释了如何使用 here。例如:
let response = await fetch(url);
if (response.ok) { // if HTTP-status is 200-299
let json = await response.json();
} else {
alert("HTTP-Error: " + response.status);
}
好的,所以在阅读、研究和重写我的代码之后,我能够完成这项工作。我只需要添加 xmlHttp.setRequestHeader('Content-Type', 'application/json');
并且能够从我的 WebMethod 获得响应。哈哈
在尝试 call/invoke ASP.NET 具有 JSON return 类型的 WebMethods 时,请始终牢记这一点。
有没有办法使用原生 JS 调用 WebMethod AJAX?
类似于:
$.ajax({
type: "POST",
url: "AssignAdditional_Equip.aspx/getEquipListing",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
var result = JSON.parse(data.d);
console.log(result);
},
error: function (response) {
alert(response);
}
});
下面的代码是我的尝试:
var requestVar = new XMLHttpRequest();
requestVar.open('GET', 'AssignAdditional_Equip.aspx/getEquipListing');
requestVar.onload = function () {
if (requestVar.status === 200) {
console.log(requestVar.responseText);
}
else {
alert('Request failed. Returned status of ' + xhr.status);
}
};
requestVar.send();
编辑:这是我在代码隐藏上的 web 方法,以消除一些混乱
<WebMethod>
Public Shared Function getEquipListing()
Dim equipType_Options As New List(Of String)
Dim serializer As New JavaScriptSerializer
Dim sqlConn As New SqlConnection
Dim reader As SqlDataReader
sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings("ITSGinventory").ConnectionString
Dim sqlCmd As New SqlCommand("SELECT DISTINCT(Equipment_Type) FROM tbl_Equipments ORDER BY Equipment_Type ASC", sqlConn)
sqlConn.Open()
reader = sqlCmd.ExecuteReader
While reader.Read()
equipType_Options.Add(reader("Equipment_Type"))
End While
sqlConn.Close()
sqlConn.Dispose()
Return serializer.Serialize(equipType_Options)
End Function
网络方法应该return 序列化的字符串列表。使用 JQuery,它按预期工作。但是我的本机 AJAX 方法 return 是页面的 HTML 标记而不是字符串值。我做错了吗?
我认为您可以使用 fetch 函数和 json 方法从 http 响应中提取。很好地解释了如何使用 here。例如:
let response = await fetch(url);
if (response.ok) { // if HTTP-status is 200-299
let json = await response.json();
} else {
alert("HTTP-Error: " + response.status);
}
好的,所以在阅读、研究和重写我的代码之后,我能够完成这项工作。我只需要添加 xmlHttp.setRequestHeader('Content-Type', 'application/json');
并且能够从我的 WebMethod 获得响应。哈哈
在尝试 call/invoke ASP.NET 具有 JSON return 类型的 WebMethods 时,请始终牢记这一点。