5

$.ajaxSetup 用于 jquery 中的 ajax 调用。如果我们使用 jquery ajax,这工作得很好。

但在 MVC 中,我们使用 Ajax.BeginForm()。回调处理程序是 OnFailure、OnSuccess、OnBegin。

有没有一种方法可以将 $.ajaxSetup 用于 Ajax.BeginForm()。

更新

例如,我在 10 个地方使用了 Ajax.BeginForm(),但我不想为所有人编写 OnFailure 处理程序,我只想在 jquery $.ajaxSetup 之类的普通地方编写一个常见的 OnFailure。有没有办法做到这一点?

4

3 回答 3

2

从以下文档中引用$.ajaxSetup

注意:全局回调函数应该使用它们各自的全局 Ajax 事件处理程序方法进行设置 - .ajaxStart()、.ajaxStop()、.ajaxComplete()、.ajaxError()、.ajaxSuccess()、.ajaxSend() - 而不是在内部$.ajaxSetup() 的选项对象。

因此,按照建议,使用相应的全局 AJAX 事件处理程序,例如,.ajaxError()如果您想全局处理所有 AJAX 错误:

$(document).ajaxError(function () {
    console.log('oopsy');
});
于 2012-07-07T07:48:12.273 回答
1

我正在审查微软的代码和库,以便与 ajax 进行通信是jquery.unobtusive-ajax.js,在该文件中,他们重写了发出请求的主要功能,只有一些选项。但是如果他们使用 jquery 为什么他们需要修改呢?当然,有了这个代码,所有的全局 hadlers 都关闭了。

我做了一点修改并不酷但有效,有更多时间我会用更清洁的解决方案更新它。

打开文件jquery.unobtusive-ajax.js

转到函数 asyncRequest 并在 $.extend 选项中看到四个事件beforeSend、完成、成功和错误,您可以在那里引发全局触发器。

原始代码:

complete: function () {
            loading.hide(duration);
            getFunction(element.getAttribute("data-ajax-complete"), ["xhr", "status"]).apply(this, arguments);
        },

修改后的代码:

complete: function () {
            loading.hide(duration);
            getFunction(element.getAttribute("data-ajax-complete"), ["xhr", "status"]).apply(this, arguments);
            $(document).trigger('ajaxComplete');
        },
于 2014-04-22T04:46:28.030 回答
0

您应该考虑使用 ajax 选项:

定义:

@{
 AjaxOptions ajaxOpts = new AjaxOptions
 {
    LoadingElementDuration = 2,
    LoadingElementId = "someElementIdToShowLoading",
    UpdateTargetId = "ElementIdToLoadTo"
 };
}

用过的:

@using (Ajax.BeginForm("ActionName", ajaxOpts)){}

有关完整列表,请参见此处:http: //msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions_properties.aspx

于 2012-07-06T22:30:49.757 回答