Ajax.BeginForm的$ .ajaxSetup

时间:2012-07-06 22:20:33

标签: ajax asp.net-mvc-3 ajax.beginform

$ .ajaxSetup用于jquery中的ajax调用。 如果我们使用jquery ajax,这非常好用。

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

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

更新

例如,我在10个地方使用过Ajax.BeginForm(),但不是为所有人编写OnFailure处理程序,我只想在jquery $ .ajaxSetup中编写一个常见的OnFailure。 有办法吗?

3 个答案:

答案 0 :(得分:2)

引用$.ajaxSetup的文档:

  

注意:全局回调函数应设置为各自的   全局Ajax事件处理程序方法 -   .ajaxStart(),. ajaxStop(),   .ajaxComplete(),. ajaxError(),. ajaxSuccess(),. ajaxSend()    - 而不是$ .ajaxSetup()的选项对象。

正如建议的那样,如果要全局处理所有AJAX错误,请使用相应的global AJAX event handlers,例如.ajaxError()

$(document).ajaxError(function () {
    console.log('oopsy');
});

答案 1 :(得分:1)

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

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

打开文件 jquery.unobtusive-ajax.js

转到函数asyncRequest,在$ .extend选项中,您将看到四个事件 beforeSend,complete,success和error ,您可以在那里引发全局触发器。

原始代码:

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');
        },

答案 2 :(得分: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