gpt4 book ai didi

javascript - ASP.NET AJAX - ScriptManagerProxy 和处理 html 按钮点击

转载 作者:行者123 更新时间:2023-12-02 20:30:59 29 4
gpt4 key购买 nike

我正在尝试找出如何完成以下任务:

  • 处理按钮的客户端点击事件 - 如果 javascript 调用结果为 false,则防止回发(例如 onclick="js:return IsThisAllowed()" )
  • Javascript 方法将返回 true 或 false,具体取决于使用 ScriptManagerProxy 调用生成的 Web 服务方法的结果

下面的代码被简化为我在这个问题中提到的主要组件。我可以alert()返回值没有问题,但我遇到问题的部分是如何将Web服务方法调用的结果返回到按钮onclick处理程序?由于函数 Finish() 在我假设的 XmlHttp.send() 调用成功后在单独的线程中调用,因此如何将响应的值作为 javascript 方法的返回值发送?难道我的想法都是错的吗?

我之前多次使用类似的代码来使用返回值更新 DOM,例如在 <div> 中,但不必担心捕获返回值并在我的脚本中使用它。

到目前为止我所拥有的:

.NET Web 服务方法 (VB.NET):

<WebMethod()> _
<ScriptMethod()> _
Public Function IsAllowed() As Boolean
Return True
End Function

用于生成 AJAX Web 服务方法和 html 按钮的页面的 .NET 代码

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServices/MyWebService.asmx" />
</Services>
</asp:ScriptManagerProxy>
<asp:Button ID="_btn" runat="server" OnClientClick="js:return IsAllowed();" />

Javascript

<script type="text/javascript">
function IsAllowed(orderid) {
if (!processing) {
processing = true;

var ws = new MyWebService();
ws.IsAllowed(Finish, Error)

// return TRUE if call to IsAllowed returns true!!!

return false;
}
}

function Finish(result) {
alert(result)
}

function Error() {
}

</script>

最佳答案

你不能这样做:对 Web 服务的调用是对服务器的异步请求,它会立即将控制权返回给客户端 - 并且你的 JavaScript(几乎)总是会在请求完成之前完成执行(很可能)在请求发送之前)。

由于您不知道何时会收到 ws.IsAllowed 调用的响应,因此您需要在回调中处理它(Finish错误)。

(无论您使用什么 AJAX 机制,这都是正确的。)

我对基于 ScriptManager 的 AJAX 不太熟悉,无法准确地告诉您如何执行此操作,但总体思路是我会扭转局面:而不是取消 ASP.NET按钮的单击事件,如果 AJAX 调用返回 true,我只会触发 ASP.NET 按钮。

使用 jQuery,我可以通过从普通 HTML 按钮(不是 ASP.NET Web 控件)进行 AJAX 调用来完成此操作。在成功处理程序(相当于 Finish)中,当返回值为 true 时,我将触发 ASP.NET 按钮(我可能会隐藏该按钮)。

关于javascript - ASP.NET AJAX - ScriptManagerProxy 和处理 html 按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138745/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com