【问题标题】:calling web method and post back method on same button在同一个按钮上调用 Web 方法和回发方法
【发布时间】:2014-02-28 12:16:10
【问题描述】:

我有一个这样的按钮:

<button class="btn btn-small" id="attendYes" data-rsvp="2" runat="server">Yes</button>

这最初是通过 jQuery 调用 web 方法将数据提交到数据库,然后在成功回调时更改按钮颜色。然后,我为此按钮添加了一个回发事件,以便向用户提供 ICAL 文件。

当我调用回发方法时,我开始从 ajax 调用中得到一个失败。 Web 服务运行正常,我可以在 fiddler 中看到它返回了正确的 JSON 对象,尽管 fiddler 显示图标“会话已被客户端、Fiddler 或服务器中止。”

数据库已更改并提供 ICAL 文件,我的问题是失败回调始终运行,甚至在 Web 方法完成之前。我做错了什么。

【问题讨论】:

  • 如何调用回发?
  • 只是使用标准回发 javascript .net 为绑定到事件的 runat 控件添加,我没有专门调用它。
  • 那么你的ajax调用失败是正常的。回发实际上是对浏览器的重定向。每当浏览器开始回发时,它都会停止所有当前的 ajax 调用,因为当浏览器更改 html 内容时不再需要执行它们。您必须等到您的 ajax 完成,然后再回电。但这在我看来毫无意义
  • 同意,理想情况下我会在一个 Web 方法中完成所有操作,但我不能在 Web 方法调用期间使用响应流来提供文件。我想我可能必须在 ajax 调用成功时手动调用它。
  • 感谢您的帮助 - 如果您愿意回答我很乐意接受。

标签: jquery .net web-services http


【解决方案1】:

你描述的行为是完全正常的。

回发就像浏览器的重定向。这意味着整个 HTML 文档被卸载,并且从服务器请求一个新文档。

因此,浏览器会停止当前正在运行的所有 Javascript / AJAX,因为浏览器会以任一方式卸载整个文档。浏览器向对应的服务器发送所有当前挂起的ajax请求的取消请求,导致错误。

您必须等待 ajax 调用完成,然后再回发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2022-01-23
    • 2015-10-01
    相关资源
    最近更新 更多