我正在研究使用XMLHttpRequest
到POST
到服务器的Javascript代码。Javascript XMLHttpRequest - 只有第一个POST请求工作
我的代码看起来像下面的(我在谷歌浏览器书签运行它):
var a = sometext;
var b = someOtherText;
var msg = "a=" + encodeURIComponent(a) + "&b=" + encodeURIComponent(b);
var server = new XMLHttpRequest();
server.open("POST", "http://localhost:3333", true);
server.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
server.send(msg);
,我听在我的电脑的端口3333(Windows 7)中使用的netcat 。第一次运行代码时,它工作正常,并且运行netcat的命令提示符显示POST
请求,所有标题以及发送数据的正确值(msg
)。但是,当我再次运行脚本时(在任何打开的网页上),我不再在命令提示符下看到任何新信息,我认为这意味着后面的POST
命令失败(尽管我在Chrome中查看JavaScript控制台时没有错误消息)。如果我重新启动netcat侦听器并重新运行该脚本,则第一次运行将再次正常运行,并且后续运行将不会执行任何操作。
关于为什么会失败的任何想法?
编辑: 我已经做了一点乱搞,和它原来本地主机连接不似乎被关闭(或以某种方式被保留为server
对象)。如果我关闭了我在其上运行该脚本的选项卡,则可以释放所有正在进行的资源并且脚本再次运行。
有没有什么办法可以告诉XMLHttpRequest一旦完成就关闭?我尝试添加一个标题来做到这一点('Connection: close'
),但事实证明这是不允许的。之后,我也尝试将请求更改为同步并在之后调用server.abort()
(我找不到出色的文档来说明该功能的功能),但它没有帮助。我无法弄清楚如何指定我想使用HTTP/1.0而不是1.1进行连接,这看起来可能有所帮助。
任何想法?
我已经在使用-L(我正在使用“nc -L -p 3333 -vv”启动netcat)。而且,它几乎感觉到连接永远不会关闭,因为命令提示符中的光标在信息的末尾结束,而不是在新行或任何东西上。 – scaevity
@scae:尝试使浏览器关闭与(有效)HTTP响应的连接。更新了答案。 –
谢谢!我创建了一个简单的服务器来响应HTTP请求,并使连接正常关闭。 – scaevity