从AJAX请求中检索值的函数

时间:2011-01-12 17:35:55

标签: javascript jquery ajax

如何编写一个函数,通过$.get返回从服务器获取的值?

这是我尝试过的,但不起作用:

function getMessage(key) {
    $.get("/messages.json", function(data) {
        return data.messages[key];
    }, "json");
}

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

因为Ajax请求是异步。这就是为什么你必须将回调传递给$.get来处理数据一旦可用。但是getMessage函数在执行$.get回调之前返回 您必须传递一个使用返回值执行某些操作的回调。 E.g:

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);
}

答案 1 :(得分:0)

有两种方法可以解决此问题:通过$.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);
});

注意:这些是未经测试的。