2015-04-07 98 views
1

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

目前,我必须打电话checkConnection每打开一个按钮,然后调用AJAX方法,如果有网络连接,则进入实际的AJAX调用!
无论如何,我想避免这种方式,应该在表单上的任何AJAX调用之前自动调用checkConnection函数。

总之,我想使功能表现得像一个event将任何AJAX调用

添加样品,这就使按钮点击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); 
      } 
     }); 
    } 

及以下电流的方式来调用函数:(!)

<form onsubmit="return Save();"> 
    <input type="text" id="txtYears" /><br /> 
    <input type="submit" id="btnSave" onclick="return checkConnection();" value="Save" /> 
    <script> 
     function Save() { 
      if (confirm('Are you sure?')) { 
       SaveData(); 
      } 
      else { 
       return false; 
      } 
     } 
    </script> 
</form> 

回答

4

您不能隐式调用函数,而无需实际编写通话甚至​​一度在JavaScript的。

所以,最好将其称之为实际AJAX并可以使用ajaxRequest的beforeSend财产一样以下,因此也就没有必要要求checkConnection() seperately:

$.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); 
      } 
     }); 

它降低了呼叫您已制作onsubmit()form标签!

UPDATE: 每一个Ajax请求使用之前注册一个全局函数:

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

如果认为是工作,还需要在每一个AJAX – Vikrant

+0

被调用,但如果连接返回false,Ajax请求将不会被调用@Vikrant –

+0

是这是但是PLZ读我的问题,它是AB在没有写入函数调用的情况下执行函数,无论是在其他函数中还是在AJAX中! – Vikrant

0

使用

beforeSend: function() { 
}, 

ajax方法

+0

实际上没有帮助:( – Vikrant

2

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

的jQuery已经支持自定义发布 - 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 
     } 
    } 

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

UPDATE:

if你可以做一个额外的检查,如果该函数是从形式还是一个字段名为(例如添加的参数保存数据(元素))

如果使用SAVEDATA在HTML中,做到这一点:"saveData(this)",也许你应该张贴您的HTML以及

+0

我欢迎你的建议,但它不会比我的方法有太大的区别..'如果'在AJAx而不是功能!如果多个AJAx调用,你会在每个AJAX调用它吗? – Vikrant

+0

@Vikrant,好吧,但我会建议改变你的问题的标题,因为它确实很有意义 –

+0

@Vikrant,在'if'中,如果函数是从窗体或字段调用的例如添加一个参数'SaveData(element)') –

相关问题