2017-09-23 26 views
0

這裏是我的代碼:如何將ajax請求包裝到函數中?

function ajaxRequest(value, path, website){ 
    window[website] = $.ajax({ 
     url : path, 
     type : 'GET', 
     data: { "name": value, 
      "_token": $('meta[name="_token"]').attr('content') 
     }, 

     beforeSend: function(){ 
      if(window[website] != null) { 
       window[website].abort(); 
      } 
     }, 
     success: function (people) { 
      return [status, people]; 
     }, 

     error: function (jqXHR, textStatus, errorThrown) { 
      return [status, textStatus]; 

     }, 

     timeout: 15000 

    }); 

} 

正如你看到的,那就是發送Ajax請求的功能。我這樣稱呼它:

var res = ajaxRequest('Jack', 'search/twitter', 'twitter'); 
console.log(res); 

它返回:

enter image description here

爲什麼我沒有看到結果在控制檯?注意到我可以在控制檯中看到結果,如果我發送ajax失去功能。 (結果是一組數據)

我該如何解決這個問題?

+0

您是否使用了異步調用AJAX?如果是,那麼當您在控制檯中打印它時,該值可能無法用於'res',對於常規異步ajax調用,當異步操作完成時調用成功函數。 – Niladri

回答

1
function ajaxRequest(value, path, website){ 

     return new Promise(function (resolve, reject) { 
     window[website] = $.ajax({ 
      url : path, 
      type : 'GET', 
      data: { "name": value, 
       "_token": $('meta[name="_token"]').attr('content') 
      }, 

      beforeSend: function(){ 
       if(window[website] != null) { 
        window[website].abort(); 
       } 
      }, 
      success: function (people) { 
       resolve([status, people]); 
      }, 

      error: function (jqXHR, textStatus, errorThrown) { 
       reject([status, textStatus]); 

      }, 

      timeout: 15000 

     }); 
    }); 
} 

然後做到這一點,得到的結果:

ajaxRequest('Jack', 'search/twitter', 'twitter').then(function(res) { console.log(res)}, function(err){console.log(err)})`; 
+0

看起來不錯,謝謝,upvote。我會試試 –

+0

我不知道爲什麼總是執行'reject()'。 *(不是'resolve()')* –

+0

這隻能表示Ajax調用本身失敗,您在網絡跟蹤中獲得的代碼是什麼? – suryapratap

1

首先你沒有從你的函數返回任何東西,默認值是undefined。

其次,你的res不會是你的ajax調用的結果。由於ajax是異步調用,因此只有在函數successerror中才能訪問該結果。

請看這裏。你不能退回這個。您需要在此處編寫的基於data實現的所有其他邏輯。

success: function (people) { 
    // Your logic here 
}, 
+0

與我想像的一樣 – Niladri

+0

解決方案是什麼?我應該使用承諾嗎? –

+0

@MartinAJ在獲取數據後,可以在'success'處理程序中執行操作。 – Niladri