2013-03-30 99 views
0

我想在ajax調用成功後啓動一個函數。我現在做的是成功後啓動下一個功能

function ajaxCall(url, types, next) { 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     beforeSend: function() { 

      $("#plaatsMelding").append("<div id=\"" + types + "verwerkt\"><div class=\"progress-label\">" + types + " verwerken...</div></div>"); 
     }, 
     success: function (data) { 
      $('#plaatsMelding').empty(); 
      $("#plaatsMelding").append("<div id=\"" + types + "verwerkt\"><div class=\"progress-label\">" + data + "</div></div>"); 
      //run next script 
      if (next.length) { 
       alert(next); 
       next(); //this won't work because it will search for the next() function 
      } 

     } 
    }); 
} 

我開始這個功能使用此功能:

function saveRace() { 
    ajaxCall("verwerkRace.php", "race", "savePlayers"); 
} 

所以當該功能好了,我希望它運行功能「savePlayers」。我怎樣才能做到這一點?

function savePlayers() { 
    ajaxCall("verwerkPlayers.php", "players"); 
} 

回答

3

千萬不要錯過一個字符串,傳遞一個函數:

function saveRace() { 
    ajaxCall("verwerkRace.php", "race", savePlayers); 
} 

然後在你的success,你可以這樣做:

if (next) { 
    next(); 
} 
+0

都好,但我會建議在'next'上進行'typeof'驗證以防止出現錯誤。 – Fluidbyte

2

只是通過在函數中:

function saveRace() { 
    ajaxCall("verwerkRace.php", "race", savePlayers); 
} 

JavaScript知道沒有什麼可以將你的字符串變成一個被調用的函數。

+0

「變成函數」,而不是「變成函數調用」 – thejh

+0

@thejh在13k的聲望中,你有權編輯這樣的拼寫錯誤,你知道的。 (: –

+0

我知道了,但我認爲這有點粗魯,我想在介紹其他人的東西時特別小心,如果是不匹配的引號字符,我可能已經做了。 – thejh

0

至於建議,傳遞一個函數而不是字符串

function saveRace() { 
    ajaxCall("verwerkRace.php", "race", savePlayers); 
} 

如果成功,那麼你可以檢查,以確保您傳遞一個函數,然後火了:

if (next && typeof(next) === 'function') { 
    next(); 
} else { 
    console.error('Error firing the callback!'); 
} 
+0

-1 from me 。如果傳遞了一個無效參數,你不想忽略這個參數,你希望你的代碼儘可能大聲和清晰地崩潰。 – thejh

+1

這是一個downvote的荒謬理由,特別是如果這是prod代碼。一個'else'會拋出一個錯誤,但是讓錯誤對你的腳本造成打擊是一個糟糕的想法 – Fluidbyte

+0

There - 我更新了代碼,所以你可以看到正確的方法來處理錯誤處理 – Fluidbyte