XMLHttpRequest对象在响应接收后是否会关闭?

11

我正在尝试使用XMLHttpRequest对象连接服务器,以便在不同的时间点上发送数据。我创建了一个对象并像这样“连接”到服务器:

var xhr = new XMLHttpRequest();
xhr.open("post", location, true);
xhr.send(); //Is this send call needed to open the connection?

在稍后的时间点,我会调用类似这样的东西:

xhr.send("Something to send");

然而,在查看开发者控制台时,似乎只有最初的请求成功响应了。第二个请求似乎没有发送。我正试图缩小可能的问题范围,所以我想:一旦收到响应,连接是否会关闭?为什么要保持打开状态呢?所以,我的问题是:XMLHttpRequest对象在接收到响应后是否会关闭连接?如果是这样,那么模拟持续打开连接的最佳方法是什么(以保持持续重新连接)?


1
你需要为另一个请求创建一个新的请求对象。不应该在同一个对象上多次调用 send - Bergi
@Bergi 重新调用对象上的open方法会不会更实用?或者那样行不通? - chRyNaN
1
我不认为那会更“实用”。你认为通过重复使用对象你获得了什么?如果我没记错,一些旧的浏览器对此有一些bug。 - Bergi
1
虽然在这种情况下并不会有什么戏剧性的效果,但您可以节省垃圾回收时间。如果它只是一个一次性使用并且随后被丢弃的对象,那就是设计不良。 - chRyNaN
2
“不太夸张”甚至可能有点过头了 :-) 这些对象成本相对较低(且很少需要),因此我真的会首先选择简单性。 - Bergi
1个回答

8
是的,如果你没有欺骗你的服务器使它保持活动状态,那么在响应发送后它将被关闭。
也许你想寻找Websockets。但是,如果你不想使用它们,只需为每个“请求”创建一个新的HttpRequest。
HTTP的基本通信方式:1个请求->1个响应->关闭!
编辑:请记住,Websockets是HTML5的一个新功能,因此它不适用于所有浏览器,并且如果它们适用于某些浏览器,则可能没有完全实现。

是的,我知道WebSocket。但回到XMLHttpRequest,我能否通过在该对象上再次调用open来重复使用同一对象,还是这样做不起作用? - chRyNaN
1
不,您必须为每个想要执行的“请求”重新创建一个XLMHttpRequest。 - Arnaud JOLLY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接