在JavaScript中是否有与Apache HTTP Client相同的功能?

时间:2012-07-03 17:48:41

标签: java javascript apache

我是一名新的程序员,主要背景是Java。我试图用Javascript中的程序编写故障处理,就像在Java中一样。在java中,我使用Apache HTTP客户端来创建客户端并调用Httpget请求。

 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 个答案:

答案 0 :(得分:1)

在javascript中,与其他一些语言一样,“异常”处理主要由错误检查取代。例如,您将在发出请求时检查xmlhttprequest对象的状态:

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

例外仅在少数几个地方有用,例如parseInt。

但我不确定一个沉重的“容错”javascript代码是否很有意义:

  • 你真的不知道你的代码将在何处以及如何执行
  • 所有重要的检查和所有重要的持久性都是客户端

您的全球系统必须认为浏览器是外国域名:进入您的服务器的任何内容都不可信任。

答案 1 :(得分: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这样的库来抽象出这种样板。