在任何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的方式:
如果没有在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
方法