2012-01-11 81 views
4

我有這個功能如何在javascript函數中返回json對象?

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     return json; 
    }); 
} 

我打電話這個功能

$(function(){ 
    var tags = getTags('0'); 
}); 

的問題是,在功能getTags()返回json就像

{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}

但在var tags = getTags('0'),捕獲返回值,它得到價值。

我返回的值的方式不正確嗎?

+1

的可能重複[異步JavaScript的返回值與jQuery /分配](http://stackoverflow.com/questions/7779697/javascript -asynchronous-return-value-assignment-with-jquery) – 2012-01-11 21:10:04

回答

5

與許多其他已經正確描述的一樣,ajax請求在默認情況下運行異步。所以你需要以適當的方式處理它。你可以做的是返回也由jQuery承諾製造者組成的jXHR對象。這可能looke像

function getTags(level){ 
    return $.getJSON("php/get-tags.php", { "parent": level }); 
} 

,然後用它對付像

$(function(){ 
    getTags('0').done(function(json) { 
     // do something with json 
    }); 
}); 
1

您不能從AJAX調用返回。它是異步的。您需要讓所有邏輯處理回調中返回的數據。

1

getJSON是異步的,調用它的函數在HTTP響應返回並觸發回調時完成。

你不能從它返回。

使用回調來做任何你想做的數據。

2

您試圖以同步方式調用異步函數。

當您調用getTags時,它會觸發對您的PHP頁面的調用,如果javascript被阻止,那麼您的頁面將掛起,直到您的服務器用JSON響應。你需要重新思考你的邏輯並引發回調。

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     //do something with the JSON here. 
    }); 
} 
1

如果你需要它這樣的工作,你的getTags函數必須返回一個值。它現在不在。您可以通過使用$.ajax並將async設置爲false來實現此目的。

+2

'async:false'使整個瀏覽器鎖定,直到完成AJAX調用。 – 2012-01-11 21:23:40

+0

嗯。是。如果這就是OP想要的..? – bububaba 2012-01-11 21:25:50

+1

我的意思是這是一件壞事,因爲用戶可能認爲他們的瀏覽器崩潰了。 – 2012-01-11 21:33:17