2011-06-13 103 views
4

我有一個運行throught連續5個步驟的過程,並在我的網頁,我呼籲每個人的AJAX方法。jQuery的AJAX「太多遞歸」

的想法是運行第一個,如果一切ok了第二個,依此類推。

我的代碼是:

$("#foo").click(function(){ 
    $.ajax({ 
     url: 'ajax.php', 
     async: false, 
     data: { 
      step: 1 
     }, 
     dataType: 'json', 
     type: 'GET', 
     success: walk_through(data) 
    }); 
}); 

function walk_through(data) 
{ 
    if(data.status == 'ok') 
    { 
     if(data.next_step == 'end') 
     { 
      // All steps completed 
     } 
     else 
     { 
      // Current step completed, run next one 
      $.ajax({ 
       url: 'ajax.php', 
       async: false, 
       data: { 
        step: data.next_step 
       }, 
       dataType: 'json', 
       type: 'GET', 
       success: walk_through(data) 
      }); 
     } 
    } 
    else 
    { 
     alert("Error."); 
     console.log(data); 
    } 
} 

即時得到「太多遞歸」錯誤,即使我的Ajax調用被設置爲syncronous ..爲什麼呢?

+0

代碼是否工作,儘管錯誤呢,還是失敗?你真的*希望請求是同步的嗎?如果它們是異步的,它將不會遞歸。 – Pointy 2011-06-13 12:41:29

+0

很顯然你不曾經得到NEXT_STEP ==「端」檢查什麼是響應 – venimus 2011-06-13 12:44:17

+0

@Pointy:不,我不需要請求是syncronous,但我認爲問題是, – Strae 2011-06-13 12:57:06

回答

9

變化

success: walk_through(data)

success: walk_through

你想要的功能walk_through是成功的處理程序,但你不希望立即調用該函數。

+0

+1好點。這是實際的問題。它會調用該方法去把中籤屬性的值,所以它不會就獲得儘可能做任何Ajax調用的。 – Guffa 2011-06-13 12:45:45

+0

這是肯定的。通過傳遞'walk_through(數據)'你執行函數並傳遞結果作爲的onSuccess方法。你需要傳遞方法本身。 – 2011-06-13 12:47:15

+0

這就是問題所在!謝謝! – Strae 2011-06-13 12:49:02

2

JavaScript是錯在你的AJAX調用:

$.ajax({ 
    url: 'ajax.php', 
    async: false, 
    data: { 
     step: data.next_step 
    }, 
    dataType: 'json', 
    type: 'GET', 
    success: walk_through //You had walk_through(data), which makes a function call, rather than a reference to a function. 
}); 
0

你walk_through功能,​​每次調用它本身是成功的。

+0

其實它自稱,即使它不是。 – Shurdoof 2011-06-13 12:45:19