试图存储jquery回调的值,但代码不按顺序运行

时间:2009-09-20 00:22:42

标签: jquery

我有一些代码可以做到这一点:

function A(){
    $.ajax({
        ...blah blah...
        success: function(data){
            return data;
    });
 }

然后我试图稍后使用这些数据:

var x = A();
x.doSomething();

但是从不存储x,因为A()需要一段时间。有什么方法可以避免这种情况吗?

3 个答案:

答案 0 :(得分:1)

关于同一主题的其他问题:

我相信还有更多。然而,所有这些建议都归结为两条路径。

向下传递回调

function A(callback){
    $.ajax({
        //...blah blah...
        success: function(data){
          if (typeof callback == 'function') callback(data);
        }
    });
 }

 // passing our function through will cause it to be called after the data
 // is received
 A(function(data) {
  data.doSomething();
 }); 

使您的AJAX同步

这个选项似乎更容易,但它会在等待你的AJAX请求时阻止所有脚本执行,因此不是那么可取

function A() {
  var retValue;
  $.ajax({
    async: false,
    success: function(data){ 
      retValue = data;
    }
  });
  return retValue;
}

var x = A();
x.doSomething();

答案 1 :(得分:0)

为什么不操纵回调中的数据?

答案 2 :(得分:0)

接受meder的回答并扩展它:

为什么不立即采取行动取得成功,如:

function A()
{
  $.ajax
  (
    {
      success: function(data)
      {
        data.doSomething();
      }
    }
  );
}