2014-12-22 224 views
0

我做了4個ajax調用,當找到記錄123456時它應該返回false(stop)。此外,記錄123456可能存在於所有四個ajax結果中。但是,代碼不會停止,代碼會繼續執行。返回false繼續執行

var endPoint0 = ''; 
var endPoint1 = ''; 
var endPoint2 = ''; 
var endPoint3 = ''; 

$.when(
    $.ajax(endPoint0), 
    $.ajax(endPoint1), 
    $.ajax(endPoint2), 
    $.ajax(endPoint3) 
).then(pass); 

function pass(a, b, c, d){ 
    var array = []; 
    array.push(a[0].guides, b[0].guides, c[0].guides, d[0].guides); 
    $.each(array, function(index,jsonObject){ 
     $.each(jsonObject, function(i, item){ 
      var e = item.program_id; 
      if (e == 123456) { 
       listing(item); 
       return false; 
      } else { 
       console.log('no record'); 
      } 
     }); 
    }); 
} 

function listing() { 
    // display output here 
} 
+0

是否調用了'listing'函數? – meskobalazs

+0

是的,這是爲了列出傳遞的對象(應該是一個對象)。但是,由於返回false不起作用,它已被多次調用。 – baker

+0

你確定嗎?由於'return false'在jQuery''each'中起作用,我剛剛在jsFiddle中檢查過。 – meskobalazs

回答

0

按照jQuery文檔http://api.jquery.com/jquery.when/

var d1 = new $.Deferred(); 
var d2 = new $.Deferred(); 

$.when(d1, d2).done(function (v1, v2) { 
    console.log(v1); // "Fish" 
    console.log(v2); // "Pizza" 
}); 

d1.resolve("Fish"); 
d2.resolve("Pizza"); 

您需要標記作爲回調的決心。我的想法是把你的邏輯,然後標記它的決心,並停止執行。

-1

您是否嘗試過使用break?因爲它在循環中。

$.each(array, function(index,jsonObject){ 

$.each(jsonObject, function(i, item){ 
    var e = item.program_id; 
    if (e == 123456) { 
     listing(item); 
     break; //return false; 
    }else{ 
     console.log('no record') 
    } 
}); 

}); 
+0

無法正常工作。 '非法break語句' – baker

+0

Break僅針對循環,開關和標籤定義,而不是像$ .each()這樣的函數。 – Nit

0

我認爲,這個問題是,你從內each功能塊破裂,但不是外部之一。