我正在研究用于服务器的 JavascriptXMLHttpRequest
代码POST
。
我的代码如下所示(我从 google chrome 中的书签运行它):
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);
我正在使用 netcat 在我的计算机(Windows 7)的端口 3333 上监听。我第一次运行代码时,它运行良好,运行 netcat 的命令提示符显示POST
请求、所有标头以及已发送数据的正确值 ( msg
)。但是,当我再次运行脚本(在任何打开的网页上)时,我不再在命令提示符中看到任何新信息,我认为这意味着后面的POST
命令失败(尽管当我在 Chrome 中查看 JavaScript 控制台时没有错误消息)。如果我重新启动 netcat 侦听器并重新运行脚本,第一次运行将再次正常运行,后续运行将无济于事。
关于为什么失败的任何想法?
编辑:
我做了更多的事情,结果发现与 localhost 的连接似乎没有被关闭(或者以某种方式被保留给server
对象)。如果我关闭在其上运行脚本的选项卡,则会释放所持有的所有资源,并且脚本会再次运行。
有没有办法告诉 XMLHttpRequest 在完成后立即关闭?我尝试添加一个标题来做到这一点('Connection: close'
),但事实证明这是不允许的。我还尝试将请求更改为同步并server.abort()
随后调用(我什至找不到很好的文档来说明该函数的确切作用),但这没有帮助。我不知道如何指定我想使用 HTTP/1.0 而不是 1.1 进行连接,这似乎可能会有所帮助。
有任何想法吗?