在任何AJAX调用之前触发javascript函数

在这里,我有一个函数需要在.NET项目中出现的任何AJAX调用之前调用。

目前,我必须在每次按钮点击时调用checkConnection ,这将调用AJAX方法,如果有网络连接,则进入实际的AJAX调用!
无论如何,我想避免这种方式,并且应该在窗体上的任何AJAX调用之前自动调用checkConnection函数。

简而言之, 我希望使函数的行为类似于在任何AJAX调用之前触发的event

添加样本,使按钮点击时调用AJAX; 当然,在检查互联网可用性后……

 //check internet availability function checkConnection() { //stuff here to check internet then, set return value in the variable return Retval; } //Ajax call function SaveData() { var YearData = { "holiday_date": D.getElementById('txtYears').value }; $.ajax({ type: "POST", url: 'Service1.svc/SaveYears', data: JSON.stringify(YearData), contentType: "application/json; charset=utf-8", dataType: "json", processData: true, success: function (data, status, jqXHR) { //fill page data from DB }, error: function (xhr) { alert(xhr.responseText); } }); } 

以下是当前呼叫function的方式:

 

function Save() { if (confirm('Are you sure?')) { SaveData(); } else { return false; } }

如果没有在JavaScript中实际编写一次调用(!),就无法隐式调用函数。

所以,最好在实际的AJAX调用它,为此你可以使用ajaxRequest的beforeSend属性,如下所示,因此不需要单独调用checkConnection()

 $.ajax({ type: "POST", url: 'Service1.svc/SaveYears', data: JSON.stringify(YearData), contentType: "application/json; charset=utf-8", dataType: "json", processData: true, beforeSend: function() { if(!checkConnection()) return false; }, success: function (data, status, jqXHR) { //fill page data from DB }, error: function (xhr) { alert(xhr.responseText); } }); 

它减少了你对form标签的提交onsubmit()的调用!

更新:在每个AJAX请求使用之前注册一个全局函数:

 $(document).ajaxSend(function() { if(!checkConnection()) return false; }); 

最好的方法是使用publish-subsribe模式添加要在预定时间调用的任何额外函数(例如,在ajax之前或之后)。

jQuery已经支持自定义publish-subsrcibe

对于这个具体的例子,只需这样做:

 //Ajax call function SaveData(element) { var doAjax = true; var YearData = { "holiday_date": D.getElementById('txtYears').value }; if (element === myForm) { doAjax = checkConnection(); } if ( doAjax ) { $.ajax({ type: "POST", url: 'Service1.svc/SaveYears', data: JSON.stringify(YearData), contentType: "application/json; charset=utf-8", dataType: "json", processData: true, success: function (data, status, jqXHR) { //fill page data from DB }, error: function (xhr) { alert(xhr.responseText); } }); } else { // display a message } } 

希望我正确理解你的意思。

更新:

if你可以做一个额外的检查是否从窗体或字段调用函数(例如添加一个参数SaveData(element))

如果你在html中使用saveData,请执行以下操作: "saveData(this)" ,也许你应该发布你的html

使用

 beforeSend: function () { }, 

ajax方法