2016-09-29 79 views
0

你好,我是新的JavaScript和AngularJS.This是我的功能從服務器獲取上傳.json(服務器返回一個JSON):如何從URL狀態代碼

function getProducts() { 
     return $http.get(urlProducts).then(
      //Success 
      function(response) { 
       products= response.data.result; 
       return products; 
      }, 
      //Error 
      function(response) { 
       //put best way to return an error 
       return something; 
      } 
     ); 
    } 

我的問題是:這是從Web服務器 我想知道獲取數據的最佳方式並非只有成功了的響應,也如果狀態代碼是200

然後,我想知道,如果是錯誤我真的想要返回(我想用文本顯示圖像:「不可以連接服務器,再試一次」)。但我使用Ionic(HTML5,CSS3和JavaScript與AngularJS)製作應用程序。所以...什麼是最好的方式來返回一個錯誤,我想用一段文字來展示一個圖像,這個錯誤是關於我在apache cordova中編程的。 謝謝!

+2

http://stackoverflow.com/questions/27507678/in-angular-http-service-how-can-i-catch-the-status-of-error – epascarello

+1

你不應該擔心狀態碼200,如果狀態代碼不是200個代碼中的一個,承諾將被'$ http'拒絕 – charlietfl

回答

0

作爲每AngularJS文檔:

的$ HTTP服務是核心角服務便於與遠程HTTP服務器

從$ HTTP調用的響應對象具有這些 通信屬性(除其他外):

數據 - {string | Object} - 使用轉換函數轉換的響應正文。

status - {number} - 響應的HTTP狀態碼。您可以使用它來根據不同代碼制定邏輯

statusText - {string} - 響應的HTTP狀態文本。

在你的例子中,你已經實現了Promise.protorype.then()函數,它允許你委託成功(第一個參數)和錯誤(第二個參數)進行進一步處理,一旦承諾完成($ http。撥打電話已完成)。

這是我將如何根據您的例子做:

function getProducts() { 
    // Call the http get function 
    return $http.get(url).then(

     //The request succeeded - 200 status code 
     function(response) { 
      products= response.data.result; 
       return products; 
     }, 

     //The request failed 
     function(response) { 

      // Here you can access the status property and the statusText 
      console.log("Http Status: " + response.status + " Description: " + response.statusText); 

      // Return a false result 
      return false; 
}); 

我通常會使用一個庫像Angular-UI-Notification,並清理了一下我實現它是這樣的:

//The success handler function 
function handle_response_success(response) { 
    // Do processing here based on the response then show a success notification 
    Notification.success('Success notification'); 
}; 

// The error handler function 
function handle_response_error(error) { 
    Notification.error('Something went wrong with that request. More Info: ' + 'Http Status: ' + error.status + ' Description: ' + error.statusText); 
} 

// Then finally bind it to your getProducts call 

function getProducts() { 

    // More elegant proto imho 
    return $http({ method: 'GET', 
     url: 'http://example.com' 
    }); 
}; 

// More elegant way to handle this imho 
getProducts.then(handle_response_success.bind(this), handle_response_error.bind(this); 
+0

感謝您的回覆。如何在視圖中顯示錯誤圖像? –

+0

有很多方法可以實現這一點。最簡單的方法是將消息綁定到$ scope屬性,然後用ng-model顯示。如果您還需要進一步的幫助,請提出另一個問題,我會很樂意回答。如果他們幫忙,也請提高答案 – geekonedge