2013-07-23 34 views
-1

我有這樣的代碼:

function retrieve_districts(){ 

var json=''; 

$.get("http://localhost/aaa/districts.php",function(result, textStatus) {  
    if(textStatus=="success"){ 
     json=JSON.parse(JSON.stringify(result)); (alert works fine here) 
    } 
}, "json"); 

alert(json); 

}

但警報是空的,我該怎麼辦?非常感謝你

+5

Ajax是異步的 – Ross

+1

在實際工作的位置使用'alert'有什麼問題? –

+2

他正在打個電話,***解析它兩次***,會發現誰的調皮和很好.... – adeneo

回答

1

警告你的JSON,不會在代碼的底部工作。在Ajax調用完成之前,json變量不會被填充,因此爲什麼在if語句中alert可以正常工作。

您可以將回調方法放入if語句中,並在Ajax查詢完成後調用回調方法。

0

歡迎來到異步編程的奇妙世界!

您必須在回調函數中移動alert

你可能會推動你的代碼行爲像同步,但是,我不會推薦它,你總會發現自己在設計上掙扎。

0

警報爲空,因爲執行警報時json的值爲''

AJAX在設計上是異步的。因此,儘管在技術上可能,它可能會在它之後的另一行代碼之前完成(雖然它在這個示例中是極不可能),但它不是保證。當AJAX請求啓動時,它會在另一個線程中繼續,而其餘的內聯代碼會立即繼續,而不會等待AJAX​​請求完成。

因此,爲了響應你的AJAX請求做任何事情,你需要做的是在回調函數:

function retrieve_districts(){ 

    var json=''; 

    $.get("http://localhost/aaa/districts.php",function(result, textStatus) {  
     if(textStatus=="success"){ 
      json=JSON.parse(JSON.stringify(result)); 
      alert(json); 
     } 
    }, "json"); 
} 

它被傳遞到get()功能函數是回調,將被執行在AJAX請求完成後。