簡體   English   中英

從AJAX請求中檢索值的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM