は私がchecker
60秒ごとにそのように呼ばれる関数の実行ブロックせずに呼び出します:複数のAJAXは
setInterval(checker, 60 * 1000);
checker
はそれがAJAX経由でチェックするURLの配列を持っているが、現在のコードは次のようである:
$.ajax({
url: sites[i].url,
type: "GET",
dataType: "json",
async: false,
success: function(data){
//blah blah blah
}else{
//something else
},
error: function(){
//blah blah blah
}
});
コードは動作し、JSONの結果に応じていくつかのUIベースのものが変更されます。私の問題は、このいくつかのサイトをチェックするための実行時間が〜4秒であり、その時点でページがこの時間に応答しなくなることです。 async: false
を削除すると、コードは期待どおりに機能しなくなります。
誰かがこの問題を解決するためにコールバックを使用して説明しましたが、このコンテキストでそれらを使用する方法を理解していません。サイト名は常に最後として表示されていることを
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
fail
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
Site 404Site Not OK
注:私は見コンソールで
function promtest(){
var sites = [
{ name: "WorkingSite", url: "http://sitename.com/testing.php" },
//a bunch more sites, 1 returns a 404 to test for failure
{ name: "404Site", url: "http://404url.com/testing.php" }
];
var promiseList = [];
for(var i in sites){
var promise = $.ajax({
url: sites[i].url,
type: "GET",
dataType: "json",
async: true,
success: function(data){
if(data.Response != 'OK'){
console.log('Site ' + sites[i].name + ' Not OK');
}else{
console.log('Site ' + sites[i].name + ' OK ');
}
},
failure: function(data){
console.log('Failure for site: ' + sites[i].name);
},
error: function(){
console.log('Site ' + sites[i].name + ' Not OK');
}
});
promiseList.push(promise);
}
$.when.apply($, promiseList).then(function(){console.log('success')}, function(){console.log('fail')});
}
:
がadosanからの提案に基づいてコードを更新しました
EDIT 1つはリストにあります。
あなたは非同期を削除するときに動作していないものを、手の込んだしてください。 –
非同期に実行すると考えましたか( '' async:true'')? – Crowes
私は上記のコードが実際に動作するとは思わない... * else *は関数の外にある。 – Robert