2016-07-05 28 views
0

嗨我有一个情况,我必须返回异步真正的responseText。有没有办法使用异步真正使用jQuery Ajax获取responseText

var initAjax = function(){ 
    var customAjaxResponse = $.ajax({ 
     type: 'POST', 
     url: url, 
     data: data, 
     beforeSend: function (xhr) { 
      $(".preloader div").removeClass('hide'); 
     } 
    }).done(function (jsondata) { 
     $(".preloader div").addClass('hide'); 
     try { 
      return jsondata; 
     } catch (e) { 
      generate("error", '<div class="activity-item"> \n\ 
      <i class="fa fa-ban text-warning"></i> <div class="activity">Sorry! we are unable to find requested data, kindly try after some times.</div></div>'); 
     } 
    }).error(function (jqXHR, exception) { 
     var error = ""; 
     if (jqXHR.status === 0) { 
      error = "No internet Connection found."; 
     } else if (jqXHR.status == 404) { 
      error = "Page not found."; 
     } else if (jqXHR.status == 500) { 
      error = "Internal server error occurred."; 
     } else if (exception === 'parsererror') { 
      error = "JSON Parse error occurred."; 
     } else if (exception === 'timeout') { 
      error = "Your request has been timed out."; 
     } else if (exception === 'abort') { 
      error = "Ajax request has been aborted unexpectedly"; 
     } else { 
      error = "Uncaught error occurred - " + jqXHR.responseText; 
     } 
     generate("error", '<div class="activity-item"> \n\ 
       <i class="fa fa-ban text-warning"></i> <div class="activity">' + msg + '</div></div>'); 
    }); 
    return customAjaxResponse.responseText; 
} 

是否有可能与异步返回数据:真的,因为我不能表现出任何Ajax-loader在图像ASYN:假

回答

1

不,这是不可能的。您不能从async呼叫返回responseText。因为initAjax会结束它的执行,所以在ajax之前会从服务器得到一些东西。

解决此问题的常用方法是返回Promise,并等待它解决。

var initAjax = function(){ 
    var customAjaxResponse = $.ajax({ 
     type: 'POST', 
     url: url, 
     data: data, 
     beforeSend: function (xhr) { 
      $(".preloader div").removeClass('hide'); 
     } 
    }).done(function (jsondata) { 
     //done 
    }).error(function (jqXHR, exception) { 
     //error 
    }); 
    return customAjaxResponse.promise(); 
} 
var promised_data = initAjax(); 
promised_data.then(function(response){ 
    //code to process response 
}); 

也可以尝试一下,以保证图书馆的:Q,蓝鸟...

Library's Comparison

另一种方式来解决您的问题是使用巴贝尔的async/await。但是,据我所知,这个语法不是es6或es7的一部分。

+0

伟大的,工程好哥们。 –

相关问题