2013-04-10 36 views
-4

在我的劇本,我有一個AJAX調用一個PHP文件,我想有調用下面的腳本被執行做同步的AJAX腳本

這裏的其餘部分之前完成是我指的腳本:

function game_settings(state){ 
    if(state == "load"){ 
     ui.load_game(); 

     //do ajax call to load user last save 
     var dataString = {"user_data": "true"}; 
     $.ajax({ 
      type:"POST", 
      url:"PHP/class.ajax.php", 
      data: dataString, 
      dataType: 'JSON', 
      success: function(success) { 
        player_details_init(success) 
      }, 
      error: function(){ 
       alert("ERROR in User data"); 
      } 
     }); 

     console.log (player_level); 
     //scene.load("level_"+level); 

     //instantiate a heroObject 
     player = new Player(20,20,game_width, game_height); 
     // set it's image to the proper src URL 
     player.image.src = "images/Mage_Sprite.png"; 
     // once the image has completed loading, render it to the screen 
     player.image.onload = function() 
     { 
      player.render(); 
     }; 

     lastUpdate = Date.now(); 
    } 

因此,例如,當腳本運行時,我可以在Ajax請求被製成控制檯中看到的,然後將腳本的其餘部分獲得前阿賈克斯已經完成導致這個調用執行現在:

console.log (player_level); 

返回未定義,而不是它應該是因爲ajax尚未完成的值。

爲了澄清我的問題是:

我應該怎麼做腳本的其餘部分之前Ajax調用完成會得到處理?

謝謝

+4

[documentation](http://api.jquery.com/jQuery.ajax/)非常清楚地解釋瞭如何使請求同步。 – Quentin 2013-04-10 16:57:51

+2

同步ajax通常被認爲是對用戶體驗不利的事情,因爲它在等待響應時凍結瀏覽器。除非在特殊情況下(甚至不能想到一個),那麼編寫異步ajax會更好。 – Pointy 2013-04-10 16:59:01

+2

@Pointy對於'unload'回調,你的ajax調用必須是同步的,否則它不會觸發。想想那些情況是你想讓服務器知道「用戶正在註銷」什麼的。 – 2013-04-10 17:01:01

回答

1

您可以將腳本的其餘部分放入AJAX調用的成功回調中,也可以將AJAX調用配置的async屬性設置爲false,這會使其同步。

+0

設置爲false會有訣竅! – 2013-04-10 17:07:44

+0

什麼?否否,不要讓你的ajax同步,除非它是絕對需要的,你知道完整的分支。 – 2013-04-10 17:23:34

+1

@BradM,他問道,我回答。至於這些後果......如果他想停止在他的頁面上執行所有腳本......就由他來執行。 – 2013-04-10 17:24:33

4

把「腳本的其餘部分」放在成功回調函數中。

+1

或「總是」功能 – PitaJ 2013-04-10 16:57:51