2012-08-13 158 views
0

我無法使嵌套的AJAX調用正常工作。我想要的只是在外部AJAX調用成功完成後執行內部AJAX調用。嵌套的AJAX調用不起作用

var diningHours = $("#diningHours"); 
var facStaffDiningData = $("#facStaffDiningData"); 
var diningCommonsData = $("#diningCommonsData"); 
if($.trim(diningHours.html()).length == 0) { 
    var season; 
    //This call executes fine (tested it with console logging) 
    $.get("data/dining-hours.php", {summer: "check"}, function(seasonData, seasonStatus) { 
     if(seasonStatus == "success") { 
      season = seasonData; 
      //This is the call that isn't being executed 
      $.get("data/dining-hours.php", function(hoursData, hoursStatus) { 
       if(hoursStatus == "success") { 
        var hours = $(hoursData).find("hours dining"); 
        var html = hoursFeed(hours, season); 
        diningHours.append(html).collapsibleset("refresh"); 
       } 
      }); 
     } 

    }); 
} 

我做錯了什麼?

+0

Firebug發生了什麼事?網頁上是否有任何錯誤? – 2012-08-13 17:50:44

+3

這是一個相當不錯的選擇,「seasonStatus ==」成功「返回false,並且爲什麼您需要檢查成功處理程序中的狀態是否」成功「,超出了我! – adeneo 2012-08-13 17:51:26

+0

它是不是正在執行,還是$(hoursData).find(「hours dining」)沒有選擇任何東西?您可能需要設置一些斷點並確切地查看失敗的位置。 – MrOBrian 2012-08-13 17:54:44

回答

0

深入挖掘問題我發現問題的真正根源。 XML文檔存在一堆編碼錯誤(數據中包含保留和版權符號等內容)。刪除這些並用正確的實體替換它們可以解決問題。我認爲這個問題的原始代碼現在工作得很好。

0

我覺得seasonStatus是多餘的,因爲回調會在成功時執行。

這應該工作

var season; 
    //This call executes fine (tested it with console logging) 
    $.get("data/dining-hours.php", {summer: "check"}, function(season, seasonStatus) { 
      console.log('CB1',season); 
      $.get("data/dining-hours.php", function(hoursData) { 
        console.log('CB2',hoursData); 
        var hours = $(hoursData).find("hours dining"); 
        var html = hoursFeed(hours, season); 
        diningHours.append(html).collapsibleset("refresh"); 

      }); 
     } 

    }); 
+0

你是對的,我不應該有額外的狀態檢查。它仍然沒有工作。 – Aaron 2012-08-13 18:10:06

+0

你能舉一個seasonData的例子嗎?也許我們會有用一個console.log(seasonData)作爲回調函數的第一行。 – 2012-08-13 18:29:08

+0

當然,'seasonData'將會是「夏天」或「秋天」。它在另一個函數中用作變量來確定如何遍歷XML文檔。此外,在第一個AJAX請求的回調中記錄'seasonData'可以正常工作(並返回正確的值)。這是第二個請求的回調,似乎沒有執行。 – Aaron 2012-08-13 18:35:06

0

我想嘗試這樣的事:

var diningHours = $("#diningHours"), 
    facStaffDiningData = $("#facStaffDiningData"), 
    diningCommonsData = $("#diningCommonsData"); 

if(!$.trim(diningHours.html()).length) { 
    var XHR = $.get("data/dining-hours.php", {summer: "check"}); 
     XHR.success(function(seasonData) { 
      var season = seasonData, 
       XHR2 = $.get("data/dining-hours.php"); 
       XHR2.success(function(hoursData) { 
        var hours = $(hoursData).find("hours dining"), 
         html = hoursFeed(hours, season); 
        diningHours.append(html).collapsibleset("refresh"); 
       }); 
     }); 
}​ 

的問題是,究竟是什麼hours dining,並且你希望如何find()功能找到它?

+0

不幸的是,沒有奏效。這個代碼在我決定嵌套它們之前工作得很好,所以我知道'find()'方法正常工作。我正在使用'find()'來遍歷一個帶有這些標籤的XML文件。一切正常,沒有AJAX調用被嵌套:( – Aaron 2012-08-13 18:09:22