2010-09-25 189 views
2

我有一個像這樣的函數,它執行ajax調用來從數據庫中獲取一些數據。javascript函數返回數據

function db (content) { 
     $.post('/ajax/db.php', { 
      operation:operation, 
      content:content 
     }, function(data) 
     { 
      console.log(data); 
      return data; 
     }); 
    } 

console.log(data);給了我想要的數據。

但是我如何通過data運作分貝,這樣我可以這樣做:

var returnedData = db ('content'); 

謝謝!

回答

8

AJAX操作是異步的,因此直接返回它不是一個選項,除非讓它同步(這會鎖定瀏覽器)。相反,你應該將數據傳遞到下一個功能回調,像這樣:

function db (content) { 
    $.post('/ajax/db.php', { 
     operation:operation, 
     content:content 
    }, function(data) 
    { 
     nextFunction(data); 
    }); 
} 

或使其採取的回調,所以你可以傳遞,將得到的數據的功能,當它準備好了,就像這樣:

function db (content, callback) { 
    $.post('/ajax/db.php', { 
     operation:operation, 
     content:content 
    }, callback); 
} 

然後調用它提供的回調函數,例如:

db('content', function(data) { 
    //do something with data 
}); 
+0

只是要知道我的選擇,我怎麼讓它同步? – Mark 2010-09-27 23:16:59

+0

@Mark - 您可以使用完整的'.ajax()'版本(例如在'.post()'文檔中:http://api.jquery.com/jQuery.post/)和'async:假,'選項添加....但如果可能,避免這樣做:) – 2010-09-27 23:21:47

+0

偉大的解釋,謝謝。 – Mark 2010-09-27 23:40:17