我从我的视图页面(MVC razor)调用Java脚本函数,该函数启动一个AJAX调用。我想要这个定期重新发生。由于某种原因,它进入递归循环
function GetData(url) {
$.ajax({
url: url,
type: "GET",
contentType: "application/json; charset=utf-8",
success: onSuccess,
error: onError,
complete: function(xhr, status) {
setTimeout(GetData(url), 5000);
}
});
}
function onSuccess(data, status, xhr) {
for (var key in data) {
if (data.hasOwnProperty(key)) {
var id = data[key].id;
var value = data[key].value;
document.getElementById(id).innerHTML = value;
}
}
}
在html页面上,它在页面加载时调用此函数
<script type="text/javascript">
GetData("someurl");
</script>
当我在完全回调中设置超时时,知道它为什么会递归。
答案 0 :(得分:2)
setTimeout(GetData(url), 5000);
立即调用GetData
函数,确实进入无限循环。
相反,您希望将函数作为第一个参数传递:
setTimeout(function() {
GetData(url);
}, 5000);