2016-10-15 60 views
0

我正在嘗試編寫一個通用函數,它將填充我傳入服務器數據的任何數組。下面的代碼確實在函數中正確地填充了數組,但是當我嘗試傳入「字符」數組時,它不會接受它。AJAX調用外部數組填充

下面是函數調用:

$(document).ready(function() { 
    databaseConnect("loadCharacter.php", characters); 
    document.write(characters[0]); //This spits out 'undefined' 
}); 

這裏是功能:

function databaseConnect (file, array) { 
    if (login == true) { 
     $.ajax({ 
      type: "POST", 
      url: file, 
      data: {id : identi}, 
      success: function(data, array) { 
       array = data.split('-'); 
       i = 0; 
       while(array[i]) { 
        array[i] = JSON.parse(array[i]); 
        ++i; 
       } 
      }, 
     }); 
    } else { 
     document.write("Dude. You're not logged in."); 
    } 
} 
+0

從不使用'document.write'。如果您在頁面初始加載後使用它,它將覆蓋整個頁面幷包含您想要寫入的內容。這意味着所有的內容和資產。 – synthet1c

+2

http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron – epascarello

回答

1

您需要了解異步如何工作的。你的代碼執行是這樣的:

  1. databaseConnect叫
  2. Ajax調用發送到服務器
  3. databaseConnect功能控制返回到主$。就緒()函數
  4. 文件撰寫被稱爲 - 但在這一點上,字符數組中沒有任何內容。執行前4個步驟最多需要幾十微秒,而來自服務器的ajax響應需要更長的時間才能返回。
  5. ...稍後 - ajax返回並填充字符數組。

你應利用回調的,因爲這樣的

$(document).ready(function() { 
    databaseConnect("loadCharacter.php", processCharacters); 
}); 

function processCharacters (characters) { 
    document.write(characters[0]); 
} 

function databaseConnect (file, callback) { 
    if (login == true) { 
     $.ajax({ 
      type: "POST", 
      url: file, 
      data: {id : identi}, 
      success: function(data, array) { 
       var array = data.split('-'); 
       i = 0; 
       while(array[i]) { 
        array[i] = JSON.parse(array[i]); 
        ++i; 
       } 

       callback(array); 
      }, 
     }); 
    } else { 
     document.write("Dude. You're not logged in."); 
    } 
} 
+0

好的,謝謝!這就說得通了 :) – Nienaber