我有以下脚本执行ajax调用一次,然后在每秒后执行ajax调用另一个url。我实现了以下代码,但我认为我无法解决此回调问题以运行第二个函数。
$(document).ready(function(){
ajaxSingleCall(function(){
ajaxCalls();
});
});
function ajaxSingleCall(){
$.ajax({
type: 'GET',
url: "/matchDataOdds",
dataType: 'json'
})
.done(function(data) {
data.forEach(addOddsCanvas);
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
function ajaxCalls(){
setInterval(runner, 1000);
}
function runner() {
// run your ajax call here
$.ajax({
type: 'GET',
url: "/matchData",
dataType: 'json'
})
.done(function(data) {
liveFeed(data);
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
答案 0 :(得分:2)
我强烈建议不要将setInterval与AJAX一起使用。如果服务器返回的速度很慢,您可以在呼叫时通过呼叫开始锤击服务器。如果您使用done或complete,则服务器已尽可能快地返回。
而是将跑步者放在ajaxSingleCall的完成中,然后在跑步者的完成中使用setTimeout
注意:您的代码失败了,因为您没有在ajaxSingleCall
中执行传递的回调
$(function() {
ajaxSingleCall(); // not taking any parameters anyway...
});
function ajaxSingleCall() {
$.ajax({
type: 'GET',
url: "/matchDataOdds",
dataType: 'json'
})
.done(function(data) {
data.forEach(addOddsCanvas);
runner();
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
function runner() {
// run your ajax call here
$.ajax({
type: 'GET',
url: "/matchData",
dataType: 'json'
})
.done(function(data) {
liveFeed(data);
setTimeout(runner, 1000);
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
答案 1 :(得分:2)
您已将回调函数传递到ajaxSingleCall
,但它不接受任何参数。你必须实际使用传递的功能。它不会被自动调用:
function ajaxSingleCall(callback){
$.ajax({
type: 'GET',
url: "/matchDataOdds",
dataType: 'json'
})
.done(function(data) {
data.forEach(addOddsCanvas);
callback();
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
答案 2 :(得分:1)
尝试从ajaxSingleCall()
内部调用它。我在下面编辑了您的代码。
$(document).ready(function(){
ajaxSingleCall();
});
function ajaxSingleCall(){
$.ajax({
type: 'GET',
url: "/matchDataOdds",
dataType: 'json'
})
.done(function(data) {
data.forEach(addOddsCanvas);
ajaxCalls(); // <-- here
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
function ajaxCalls(){
setInterval(runner, 1000);
}
function runner() {
// run your ajax call here
$.ajax({
type: 'GET',
url: "/matchData",
dataType: 'json'
})
.done(function(data) {
liveFeed(data);
})
.fail(function() {
console.log("Ajax failed to fetch data");
});
}
答案 3 :(得分:0)
ajaxCalls()不会被调用,因为ajaxSingleCall函数不接受任何参数。