2012-09-26 86 views
0

我一直在尋找並閱讀大約3個小時,但無法使其工作。我想從函數中獲得一個值,所以我可以使用它來執行另一個函數。我讀過,我必須創建一個回調,但我是新的,所以我沒有太多的想法如何做到這一點。你們能幫我嗎?如何從ajax函數獲取值以執行另一個

這是從PHP中提取數據的代碼:

   $.getJSON(callback_url, { 
       ajax_action: 'list', 
       ajax_data: '' 
      }, function(data){ 

      document.getElementById('ajax-box').innerHTML = ""; 

      for(i=0;i<data.length;i++){ 

       document.getElementById('ajax-box').innerHTML += '<div> Some data loaded here</div>'; 

      } 
      }); 

此代碼後,我想,如果數據長度大於「1」像這樣執行新的功能:

if (data.length > 1) { some function here}  

我得到一個錯誤:

ReferenceError: data is not defined if (data.length > 1) {

問候,

+0

你能確認'data'實際上是一個JSON數組嗎?嘗試'console.log(JSON.stringify(data));'看看有什麼說的。 – Femi

+1

我假設你知道你可以從函數(數據)塊內調用另一個函數?只要在那裏做一個有條件的檢查,然後調用你想要的任何函數。 – ICoffeeConsumer

+0

@AlexReidy非常感謝...我忘了! –

回答

0

您收到錯誤,因爲data的範圍不在ajax call之外。

保持Ajax調用外部的變量,並用它來訪問數據

var d; 
       $.getJSON(callback_url, { 
       ajax_action: 'list', 
       ajax_data: '' 
      }, function(data){ 
      d = data; // added in your code 
      document.getElementById('ajax-box').innerHTML = ""; 

      for(i=0;i<data.length;i++){ 

       document.getElementById('ajax-box').innerHTML += '<div> Some data loaded here</div>'; 

      } 
      }); 
// use your d here 

此外,我強烈建議你寫出更好的代碼使用jQuery,用戶$(「#」)時,代替的getElementById等

0
function doAjax(postUrl,postBody,callback){ 
$.ajax({ 
     type: 'post', 
     url: postUrl, 
     data: JSON.stringify(postBody), 
     contentType: "application/json; charset=utf-8", 
     traditional: true, 
     success: function (data) { 
     callback(data); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      callback(thrownError); 
     } 
    }); 
} 
doAjax(callback_url,{request_body_json},function(data){ 
     document.getElementById('ajax-box').innerHTML = ""; 
     for(i=0;i<data.length;i++){ 
     document.getElementById('ajax-box').innerHTML += '<div> Some data loaded here</div>'; 
    } 
}); 

這種方式最適合你,只需使用doAjax方法並處理你的代碼即可。

相關問題