从 Javascript 调用 VB.NET WebMethod 函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6669421/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Calling VB.NET WebMethod Function from Javascript
提问by Darin Dimitrov
I have a VB.NET function which looks like this:
我有一个 VB.NET 函数,它看起来像这样:
<WebMethod()> _
Public Shared Function AuthenticateUser(ByVal UserInfo As String, ByVal Password As String) As Boolean
Dim UserName As String
'Just in case
AuthenticateUser = False
'Extract the user name from the user info cookie string
UserName = Globals.GetValueFromVBCookie("UserName", UserInfo)
'Now validate the user
If Globals.ValidateActiveDirectoryLogin("Backoffice", UserName, Password) Then
AuthenticateUser = True
End If
End Function
I'm trying to call it from javascript like this:
我正在尝试像这样从 javascript 调用它:
function DeleteBatchJS()
{if (confirm("Delete the ENTIRE batch and all of its contents? ALL work will be lost."))
var authenticated = PageMethods.AuthenticateUser(get_cookie("UserInfo"), prompt("Please enter your password"))
if (authenticated == true)
{{var completed = PageMethods.DeleteBatchJSWM(get_cookie("UserInfo"));
window.location = "BatchOperations.aspx";
alert("Batch Deleted.");}}}
It calls the function, but won't return a value. When walking through the code, my VB function does fire (it will return true so long as the correct password is typed in), but the javascript 'authenticated' value remains 'undefined'. It's like you can't return values from VB functions to javascript.
它调用函数,但不会返回值。在遍历代码时,我的 VB 函数确实会触发(只要输入正确的密码,它就会返回 true),但 javascript 的“已验证”值仍然是“未定义”。这就像你不能从 VB 函数返回值到 javascript。
I also tried
我也试过
if PageMethods.AuthenticateUser("UserName", "Password")
{
//Stuff
}
But still no luck.
但仍然没有运气。
What am I doing wrong?
我究竟做错了什么?
Thanks,
谢谢,
Jason
杰森
回答by Darin Dimitrov
Web methods are invoked using AJAX, i.e. asynchronously, i.e. you have to wait until the method completes before consuming the results, i.e. you have to use the success callbacks:
Web 方法使用 AJAX 调用,即异步调用,即您必须等到方法完成才能使用结果,即您必须使用成功回调:
function DeleteBatchJS() {
var shouldDelete = confirm('Delete the ENTIRE batch and all of its contents? ALL work will be lost.');
if (!shouldDelete) {
return;
}
var password = prompt('Please enter your password');
var userInfo = get_cookie('UserInfo');
PageMethods.AuthenticateUser(
userInfo,
password,
function(result) {
// It's inside this callback that you have the result
if (result) {
PageMethods.DeleteBatchJSWM(
userInfo,
function(data) {
// It's inside this callback that you know if
// the batch was deleted or not
alert('Batch Deleted.');
window.location.href = 'BatchOperations.aspx';
}
);
}
}
);
}