2016-10-15 8 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は、AJAX呼び出しが
  2. databaseConnect機能が返す
  3. にdocument.writeが呼び出されるメインの$ .ready()関数に制御をサーバーに送信され
  4. と呼ばれている:あなたのコードは次のように実行されます - まだこの時点では文字配列には何もありません。最初の4つのステップを実行するには、数十マイクロ秒がかかりますが、サーバーからのajaxレスポンスは返されるまでにはかなり時間がかかります。
  5. ...もっと後で - ajaxはcharacters配列を返すと、それを設定します。

$(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

関連する問題