使用闭包使这个jQuery Ajax async = true

时间:2014-01-10 19:02:04

标签: javascript jquery ajax closures

我写了这个对象并将其运行到我拥有的页面中:

var dataPage = {
  getData: function() { 
    return $.ajax({
      url: '/my_url/',
      data: {
        product: 'some_product',
        state: 'some_state'
      },
      type: 'POST',
      async: true,
      success: function (data) {
        //console.log(data);
        dataPage.results = data;
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert('Error:' + xhr.status);
        alert(thrownError);
     }
   });
  }
  ,returnData: function(){
               var xhr = this.getData();
               //console.log(xhr);
               xhr.done(function() {
                     //console.log(xhr.responseText);
                     this.results = xhr.responseText;
                     $('#JSON').html(this.results);
                 });
            }
}

var results = dataPage.returnData()
console.log(results)

当属性async设置为false时,它的效果非常好:数据已加载到div id="JSON"。两个console.log()返回数据,一切正常。

现在我想切换到async: true,但我不知道如何应用闭包来使函数正确传递结果数据,避免xhr.responseText成为undefined因为getData()调用的异步性质。


EDITED

我编辑了上面的代码,添加了returnData()函数,但最后console.log()仍然返回undefined。添加.done()并未解决取出全局范围的问题<{1}} ...

1 个答案:

答案 0 :(得分:1)

使用done()回调:

var jqXHR = dataPage.getData();
jqXHR.done(function(result) {
    $('#JSON').html(result);
});