2016-07-05 32 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

偉大的,工程好哥們。 –

相關問題