JavaScript中是否有与ApacheHTTP客户端等效的版本?

JavaScript中是否有与ApacheHTTP客户端等效的版本?,java,javascript,apache,Java,Javascript,Apache,我是一名新程序员,主要背景是Java。我正试图像在Java中一样,在Javascript中编写错误处理程序。在java中,我使用ApacheHTTP客户机创建客户机并调用Httpget请求 HttpClient cli = new DefaultHttpClient(); cli.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); HttpResponse resp = null; for (int i

我是一名新程序员,主要背景是Java。我正试图像在Java中一样,在Javascript中编写错误处理程序。在java中,我使用ApacheHTTP客户机创建客户机并调用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}
 }
HttpClient cli=new DefaultHttpClient();
cli.getParams().setIntParameter(CoreConnectionPNames.SO_超时,5000);
HttpResponse resp=null;
对于(int i=0;i<5;i++){
试一试{
resp=cli.execute(新的HttpGet(“http://example.org/products"));
}
捕获{//code}
}

我不确定如何在javascript环境中模拟这种行为。有人对这个领域有深入的了解吗?

在javascript中,就像在其他一些语言中一样,“异常”处理大部分被错误检查所取代。例如,您将在发出请求时检查xmlhttprequest对象的状态:

httpRequest.onreadystatechange = function() {
    if (httpRequest.readyState === 4) {
        if (httpRequest.status === 200) {
                // ok, no "exception"
            } else {
                // BOOM ! "exception"
            }
        }
    }
}
异常只在一些地方有用,比如parseInt

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

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

您的全局系统必须考虑到浏览器是一个外来域:任何进入服务器的东西都不可信。

以下是与您的代码片段完全相同的代码片段,但使用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) {
 }
var-cli;
var callback=函数(resp){
//由于XMLHttpRequest的异步特性,您需要将使用响应的所有逻辑放在回调函数中。
//下面使用responseText编写代码
控制台日志(resp);
};
var超时=5000;
var handler=function(){
var误差序列;
如果(this.readyState==4){//表示完成
errorSeries=parseInt(this.status.toString().charAt(0));//对于200或300系列响应将为“2”或“3”
如果(errorSeries==2 | | errorSeries==3){
callback.call(this,this.responseText);
}否则{
//在这里处理http错误
}
}
}
对于(变量i=0;i<5;i++){
cli=new XMLHttpRequest();//IE8及以下版本中的ActiveXObject('Microsoft.XMLHTTP')
cli.timeout=超时;
cli.onreadystatechange=handler;
试一试{
cli.open('GET','http://example.org/products');
cli.send();
}
捕获(e){
}

如果上面的内容看起来很冗长,那是因为它是。其他评论员指导您正确的做法是:使用jQuery之类的库来抽象这种样板文件。

这种模式有点令人不安。您的容错能力是无论发生什么情况都尝试/捕获同一个请求五次?因此您希望HTTP GET请求来自javascript?以zetlen,这是一段“重试”的简单示例代码如果您遇到网络问题,请每隔一段时间重试多次,以查看网络是否已重新连接。对于user104,是的,最终目标是模拟HTTPget,但我不认为没有客户端实例您就可以完成。我错了吗?@Bggreen不检查请求是否成功而重试是否常见?我道歉e、 我发布的代码只是一个整体的讽刺。我为误解感到抱歉。稍后在我的循环中,我检查它是否没有错误,如果它没有爆发感谢快速响应!我理解对设计的关注,但我相信我的最终产品将是合理的。我的问题是处理请求。我查看了xmlhttpreq根据你提到的,我相信这就是解决方案。有“javadoc”吗对于这个对象?在我调出的大多数页面上,我无法分辨它们使用的变量和内置函数之间的区别。我想我被所有令人惊叹的Java文档宠坏了。没有什么比javadoc更简单、更同质的了,但你可以试试google和。大多数情况下,你会很快理解这些示例一个好的javascript比一个普通的java程序要简单得多正如前面介绍的,您将看到javascript很容易掌握。对于大多数用途,XmlHttpRequest的另一种替代方法,很好地说明了javascript的事件/回调逻辑是:您将回调传递给此函数,在成功或失败时将调用它。这正是我需要的,谢谢。我会给您一个投票权,但显然我在这里太新了。