JavaScript中是否有与ApacheHTTP客户端等效的版本?
我是一名新程序员,主要背景是Java。我正试图像在Java中一样,在Javascript中编写错误处理程序。在java中,我使用ApacheHTTP客户机创建客户机并调用Httpget请求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
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的事件/回调逻辑是:您将回调传递给此函数,在成功或失败时将调用它。这正是我需要的,谢谢。我会给您一个投票权,但显然我在这里太新了。