在任何AJAX调用之前触发一个javascript函数
trigger a javascript function before on any AJAX call
这里,我有一个函数,它需要在.NET项目中的任何AJAX调用之前调用。
目前,我必须在每次点击要调用AJAX方法的按钮时调用checkConnection
,如果有网络连接,则进行实际的AJAX调用
无论如何,我想避免这种方式,checkConnection
函数应该在表单上的任何AJAX调用之前自动调用
简而言之,我想让函数表现得像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>
如果不使用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-subscribe模式来添加任何额外的函数,以便在预定时间调用(例如,在ajax之前或之后)。
jQuery已经支持自定义发布子rcibe
对于这个特定的例子,只需这样做:
//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(元素))
如果您在html中使用saveData,请执行以下操作:"saveData(this)"
,也许您也应该发布您的html
您可以使用:
$(document)
.ajaxStart(function () {
alert("ajax start");
})
.ajaxComplete(function () {
alert("ajax complete");
})
就是这样!!
使用
beforeSend: function () {
},
ajax
方法
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟