2016-07-05 3 views
0

こんにちは私は、async trueでresponseTextを返さなければならない状況があります。Jquery Ajaxを使用してasync trueで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; 
} 

非同期でデータを返すことが可能ではない:本当の私はアヤックスローダイメージASYNを表示することはできませんので:偽

答えて

1

んが、それは不可能です。 asyncからresponseTextを返すことはできません。 initAjaxは、それがexectionを終了するので、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

素晴らしい、うまく動作します。 –

関連する問題