16

我对 javascript 很陌生,并且正在开发一个通过 IP 解码视频的嵌入式系统。

我编写了一个小应用程序,用于使用 javascript 设置和更改频道,并包含一个用于远程控制的密钥处理程序和一个事件处理程序,因此如果视频停止或网络中断,我可以采取一些措施或显示消息,但现在我也想要设置一个自动 HTTP POST,当我更改频道以包含有关设备的一些数据和当前正在播放的 url 时发送该 POST。

这是一个运行busybox的小型嵌入式硬件设备,所以我不能使用Ajax或添加任何其他普通的Web技术,我只需要使用Javascript发送由我正在监视的事件触发的HTTP POST,所以我的第一个目标是能够按下按钮并发送该 POST 消息,然后确定稍后触发它的时间。

任何熟悉做这些事情的人都可以让我快速了解如何将帖子发送到已知的监听设备/位置并在其中包含数据?

非常感谢

4

1 回答 1

41

如果您的 Javascript 引擎支持 Web 上无处不在的 XMLHttpRequest (XHR),这很容易。谷歌它或查看此页面了解详细信息。我在下面提供了一个代码片段。仔细阅读它,特别是关于“异步”是真的评论和响应处理程序中的闭包。此外,就 Javascript 而言,这段代码是超轻量级的,我希望它可以在几乎任何现代硬件占用空间上正常工作。

var url = "http://www.google.com/";
var method = "POST";
var postData = "Some data";

// You REALLY want shouldBeAsync = true.
// Otherwise, it'll block ALL execution waiting for server response.
var shouldBeAsync = true;

var request = new XMLHttpRequest();

// Before we send anything, we first have to say what we will do when the
// server responds. This seems backwards (say how we'll respond before we send
// the request? huh?), but that's how Javascript works.
// This function attached to the XMLHttpRequest "onload" property specifies how
// the HTTP response will be handled. 
request.onload = function () {

   // Because of javascript's fabulous closure concept, the XMLHttpRequest "request"
   // object declared above is available in this function even though this function
   // executes long after the request is sent and long after this function is
   // instantiated. This fact is CRUCIAL to the workings of XHR in ordinary
   // applications.

   // You can get all kinds of information about the HTTP response.
   var status = request.status; // HTTP response status, e.g., 200 for "200 OK"
   var data = request.responseText; // Returned data, e.g., an HTML document.
}

request.open(method, url, shouldBeAsync);

request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
// Or... request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
// Or... whatever

// Actually sends the request to the server.
request.send(postData);
于 2013-02-14T19:44:35.580 回答