[英]Function to retrieve value from AJAX request
如何編寫一個返回通過$.get
從服務器獲取的值的函數?
這是我嘗試過的,不起作用:
function getMessage(key) {
$.get("/messages.json", function(data) {
return data.messages[key];
}, "json");
}
有任何想法嗎?
因為Ajax請求是異步的 。 這就是為什么必須將回調傳遞給$.get
,以便在數據可用時進行處理。 但是getMessage
函數在執行$.get
回調之前返回。
您必須傳遞一個使用返回值執行操作的回調。 例如:
function getMessage(key, cb) {
$.get("/messages.json", function(data) {
cb(data.messages[key]);
}, "json");
}
getMessage('foo', function(data) {
alert(data);
});
當然,您也可以將callack直接傳遞到$.get
並在那里處理數據提取:
function getMessage(cb) {
$.get("/messages.json", cb);
}
有兩種處理方法:通過$.ajax
使用同步調用或將回調傳遞給函數,而不是讓其返回值。 后者是處理AJAX的規范方法,因為它保留了調用的異步特性。
異步
function processMessage(key,elem,cb) {
$.get('/messages.json', function(data) {
if (cb && typeof(cb) === 'function') {
cb.apply(elem,data.messages[key]);
}
}
}
$('.something').each( function() {
processMessage('somekey', this, function(msg) {
$(this).append(msg);
});
});
同步 -盡量不要這樣做,因為您將鎖定瀏覽器直到完成。
function getMessage(key)
{
var result = '';
$.ajax({
url: '/messages.json',
aSync: false,
type: 'get',
dataType: 'json',
success: function(data) {
result = data.messages[key];
}
});
return result;
}
$('.something').each( function() {
var msg = getMessage('somekey');
$(this).append(msg);
});
注意:這些未經測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.