我正在使用JavaScript,jQuery和PHP。如何限制JavaScript函数执行一次?
我的MainJQuery文件有Ajax。 display.php执行一段时间:
....
$.ajax({
type:'POST',
url: 'display.php',
data:'id='+id ,
success: function(data){
$("#response").html(data);
//Here Get_list should be execute only once.
get_list('get');
// Display should execute as usual
display();
}//success
}); //Ajax
.......
get.Php文件将值写入JavaScript:
<?php
print "<script language='javascript'>";
print " g_cost[g_cost.length]=new Array('STA-VES','East',4500);";
print " g_cost[g_cost.length]=new Array('STA-CRF','West',5400);";
print "</script>";
?>
我的JavaScript函数具有PHP的以下值:
function get_list('get'){
for(var i=0;i<g_cost.length;i++)
var temp = g_cost[i];
var Name = temp[0];
var direction = temp[1];
var cost = temp[2];
..
some code
...
}
function display(){
for(var i=0;i<g_cost.length;i++)
alert(g_cost.length);
var temp = g_cost[i];
alert(temp[0]);
alert(temp[1]);
alert(temp[2]);
}
是否可以限制在jQuery Ajax成功部分中执行JavaScript函数?
答案 0 :(得分:10)
在jQuery中,您可以使用.one()
函数绑定一个只执行一次的方法。例如,
$("#someAnchorId").one("click", function(){
//Ajax method here
});
答案 1 :(得分:5)
您可以使用空函数替换该函数 - 这与Rene Saarsoo的解决方案基本相同,但看起来更好:
var get_list = function(param1, param2, ...) {
// your code here
get_list = function() {};
};
答案 2 :(得分:3)
三个选项:
在全局范围内设置布尔标志,在成功运行后设置它,并在运行之前进行检查
成功运行后,禁用按钮(或用于调用一次性方法的任何控件)
稍微不太优选,但您也可以在服务器端进行验证,即每次调用该方法,但在服务器端验证。好的一面是,这将确保服务器上的数据一致性。
答案 3 :(得分:3)
创建仅执行一次的功能:
get_list = (function(){
var counter = 0;
return function(param1, param2, ...) {
if (counter > 0) {
return;
}
counter++;
// your normal function code here
};
})();
这与使用全局变量跟踪函数执行次数几乎相同,除了我们创建变量而不是全局变量,只有内部函数可以看到。之后,你将get_list用作任何其他函数。
这可能会被重构为函数prototye中更通用的东西,因此它可以像这样使用:
get_list = (function (param1, param2, ...) {
...
}).once();
答案 4 :(得分:1)
最快的方法是在成功申报中增加一行:
$.ajax({
type:'POST',
url: 'display.php',
data:'id='+id ,
success: function(data){
if(!arguments.callee.stop){ arguments.callee.stop = true; }else{ return; }
$("#response").html(data);
//Here Get_list should be execute only once
get_list('get');
// display should execute as usual
display();
}//success
}); //ajax
答案 5 :(得分:0)
尝试在成功通话后禁用Ajax触发器(链接,按钮等)。
触发器示例:
<a id="ajax_trigger" href="#" onclick="yourAjaxCall(); return false;">Get List</a>
...
success: function(data){
$("#response").html(data);
//Here Get_list should be execute only once
get_list('get');
// Some code to disable, or hide #ajax_trigger
// in other words, make it unclickable or disappear.
$("#ajax_trigger").css('display': 'none'); // IIRC
// Display should execute as usual
display();
}//success