2012-07-03 90 views
0

我是一個新的程序員,其主要背景是Java。我試圖在Java中使用JavaScript編寫錯誤處理程序。在java中,我使用Apache HTTP客戶端來創建客戶端並調用Httpget請求。在JavaScript中是否有與Apache HTTP Client等價的東西?

HttpClient cli = new DefaultHttpClient(); 
cli.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); 
HttpResponse resp = null; 
for (int i = 0 ; i < 5 ; i++) { 
try { 
resp = cli.execute(new HttpGet("http://example.org/products")); 
} 
catch{//code} 
} 

我不確定如何在JavaScript環境中模擬此行爲。有沒有人有這方面的見解或知識?

+2

該模式有點令人不安。無論發生什麼情況,您的容錯是嘗試/接收相同的請求五次? – zetlen

+0

所以你想要javascript的HTTP GET請求? –

+0

對於zetlen來說,這是一個簡單的「重試」示例中的一段代碼,如果您遇到網絡問題,請每隔多次重試一次以查看網絡是否已重新連接。 對於user104,是的最終目標是模擬HTTPget,但我不認爲如果沒有客戶端實例就可以實現。我錯了嗎? – Bggreen

回答

0

下面是代碼片段的確切等效代碼,但是在JavaScript中!

var cli; 
var callback = function(resp) { 
    // due to the asynchronous nature of XMLHttpRequest, you'll need to put all logic that uses the response in a callback function. 
    // code below using responseText 
    console.log(resp); 
}; 
var timeout = 5000; 
var handler = function() { 
    var errorSeries; 
    if (this.readyState === 4) { // indicates complete 
     errorSeries = parseInt(this.status.toString().charAt(0)); // will be "2" or "3" for 200 or 300 series responses 
     if (errorSeries === 2 || errorSeries === 3) { 
      callback.call(this, this.responseText); 
     } else { 
      // handle http error here 
     } 
    } 
} 
for (var i = 0 ; i < 5 ; i++) { 
cli = new XMLHttpRequest(); // ActiveXObject('Microsoft.XMLHTTP') in IE8 and below 
cli.timeout = timeout; 
cli.onreadystatechange = handler; 
try { 
    cli.open('GET','http://example.org/products'); 
    cli.send(); 
} 
catch(e) { 
} 

如果上面看起來羅嗦,那是因爲它是。其他評論者引導你:使用像jQuery這樣的庫來抽象出這種樣板。

1

在JavaScript中,與其他一些語言一樣,「異常」處理大多由錯誤檢查取代。例如發出請求時你會檢查你的XMLHttpRequest對象的狀態:

httpRequest.onreadystatechange = function() { 
    if (httpRequest.readyState === 4) { 
     if (httpRequest.status === 200) { 
       // ok, no "exception" 
      } else { 
       // BOOM ! "exception" 
      } 
     } 
    } 
} 

例外的是隻在少數地方,比如parseInt函數是有用的。

但我不知道,一個沉重的「容錯」 javascript代碼,使有很大的意義:

  • 你真的不知道在哪裏以及如何你的代碼會被執行
  • 所有重要的檢查和所有重要的持續性是客戶端

您的全球系統必須儘管瀏覽器是一個外部域的想法:任何輸入您的服務器都不可信任。

+0

感謝您的快速響應!我瞭解對設計的擔憂,但我相信我的最終產品會很好。我的問題是處理這個請求。我研究了你提到的xmlhttprequest,我相信這是解決方案。這個對象是否有「javadoc」?在大多數頁面上,我都無法分辨他們正在使用的變量和內置函數之間的區別。我想我從Java的所有令人驚歎的文檔中被寵壞了。 – Bggreen

+0

沒有什麼像javadoc一樣簡單和同質化,但您可以嘗試谷歌和[MDN](https://developer.mozilla.org/fr/)。大多數情況下,你會非常快速地理解這些例子,因爲一個好的JavaScript遠比普通的Java程序少得多。只要確保瞭解[在此](http://ejohn.org/apps/learn/)中提供的基礎(封閉,範圍等),您就會發現javascript很容易掌握。 –

+0

您可能正在尋找[this](https://developer.mozilla.org/fr/XMLHttpRequest)。 –

相關問題