在再次调用被调用的函数之前,有什么方法可以取消调用吗?ajax调用成功后,内容被加载,我调用我的函数(紧跟在html(数据)之后),因为在其他情况下它不起作用。如果我再次加载内容,功能将重复,例如,我的所有警报都会显示两次。(如果我调用了10个ajax,我会得到10个警报,而不是一个)。
我试着只调用函数一次(在第一次ajax调用之后),但它只在第一次ajax调用时工作,在另一次调用后停止工作。
在这种情况下,我唯一的想法是在另一个调用之前取消调用函数,但我什么也没找到。
// If I don't call this function in ajax call below code doesn't work
// Ajax loaded content
function readydoc()
{
$(document).on("change","#example1",function(){
// SOME CODE
}
$(document).on("change","#example2",function(){
// SOME CODE
}
$(document).on("change","#example3",function(){
// SOME CODE
}
$(document).on("change","#example4",function(){
// SOME CODE
}
}
// MY AJAX CALL
function displayPhoto(photoid){
$.ajax({
url: "includes/displayphoto.php?photo_id="+photoid
}).done(function(data) {
if (data == false)
{
alert ("ERROR");
}
else
{
$('#content').html(data);
readydoc(); // Here I call my function
}
});
}
// HTML
<div id="content"> <!-- ALL AJAX STUFF GOES HERE <-->
<div id="example1"></div> <!-- loaded by ajax <-->
<div id="example2"></div> <!-- loaded by ajax <-->
<div id="example3"></div> <!-- loaded by ajax <-->
<div id="example4"></div> <!-- loaded by ajax <-->
</div>
正如我在评论中提到的,您的代码应该是这样的:
$(document).ready(function(){
$(document).on("change","#example1",function(){
// SOME CODE
}
$(document).on("change","#example2",function(){
// SOME CODE
}
$(document).on("change","#example3",function(){
// SOME CODE
}
$(document).on("change","#example4",function(){
// SOME CODE
}
});
function readydoc()
{
//SOME OTHER CODE YOU WANT TO TRIGGER AFTER EVERY AJAX CALL
}
// MY AJAX CALL
function displayPhoto(photoid){
$.ajax({
url: "includes/displayphoto.php?photo_id="+photoid
}).done(function(data) {
if (data == false)
{
alert ("ERROR");
}
else
{
$('#content').html(data);
readydoc(); // Here I call my function
}
});
}
每次ajax调用完成时,都会执行readydoc
,它将附加事件处理程序。每次调用都会附加越来越多的事件处理程序。相反,在页面加载时调用一次事件附加函数:
$(function() {
//this will run once when the page has loaded
$(document).on("change","#example1",function(){
// SOME CODE
}
$(document).on("change","#example2",function(){
// SOME CODE
}
$(document).on("change","#example3",function(){
// SOME CODE
}
$(document).on("change","#example4",function(){
// SOME CODE
}
});
从ajax调用中删除对readydoc
的调用——这是不需要的。这将只附加一次事件处理程序,而不管ajax调用运行了多少次。