web-dev-qa-db-ja.com

Javascriptトリガーイベントを使用してHTTPポストを送信する

私はJavaScriptが初めてで、ビデオover IPをデコードする組み込みシステムに取り組んでいます。

JavaScriptを使用してチャネルを設定および変更するための小さなアプリを作成し、リモートコントロールのキーハンドラーとイベントハンドラーを組み込んで、ビデオが停止したりネットワークがダウンした場合に何らかのアクションを実行したり、メッセージを表示できるようにしましたが、自動HTTP POSTを設定するには、デバイスと現在再生中のURLに関するデータを含めるようにチャネルを変更すると送信されます。

これはbusyboxを実行する小さな組み込みハードウェアデバイスなので、Ajaxを使用したり、他の通常のWebテクノロジーを追加したりすることはできません。Javascriptを使用してHTTP POST=監視するため、私の最初の目標は、ボタンを押してPOSTメッセージを送信し、後でトリガーするタイミングを決定できるようにすることです。

既知のリスニングデバイス/場所に投稿を送信し、その中にデータを含める方法の概要を簡単に説明できるようなことを行うことに精通している人はいますか?

どうもありがとう

12
Andy Henry

JavascriptエンジンがXMLHttpRequest(XHR)をサポートしている場合、これは簡単です。これは、Web上で広く普及しています。 Google itまたは詳細については このページ をご覧ください。以下にコードスニペットを提供しました。特に「非同期」に関するコメントと応答ハンドラーのクロージャーを注意深く読んでください。また、このコードは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);
33
Will Nelson