0

これは、プロトタイプ/実験用の非常に小さなアプリケーションです。デバイスはバッテリ寿命を節約するために頻繁にスリープ状態になり、ユーザーはローカル Web ページにアクセスしてボタンを押し、デバイスで何かを変更します。これにより、以下の JavaScript コードを使用して POST がデバイスに送信されます。

ユーザーがボタンを押したときにデバイスがスリープ状態になる可能性があるため、POST が失敗します。これが悪い習慣であることはわかっていますが、基本的には、応答を受信するまで POST を維持する (用語を正しく使用しているかどうかさえわかりません) またはデータを送信する Web ページが必要です。while ループを試しましたが、一度しか送信されませんでした。間違った場所に置いたのかもしれません。

function execPOST(url, postData, callback) {
    var postRequest = newAjaxRequest();
    postRequest.onreadystatechange = function() {
        if (postRequest.readyState == 4) {
            if (postRequest.error) {
                callback(1, "Request had an error.");
                alert('postRequest Error');
            } else {
                var status;
                try {
                    status = postRequest.status;
                } catch (err) {
                    callback(1, "Failed to get HTTP status from server.");
                    return;
                }
                if (status == 200 || status == 0) {
                    callback(0, postRequest.responseText);
                } else {
                    callback(1, "POST: Unexpected HTTP Status: "
                            + postRequest.status);
                    alert('POST: Unexpected HTTP Status: '
                        + postRequest.status);
                }
            }
        }
    }
    if (postRequest.overrideMimeType){
        postRequest.overrideMimeType("text/xml");
    }
    postRequest.open("POST", url, false);
 //I tried adding this while loop hoping it would keep sending but it only sent once
    while (postRequest.readystate != 4)
    {
        setTimeout('',2000);
        postRequest.send(postData);
    }
    return postRequest;
}
4

2 に答える 2

1

socket.ioを調べて、デバイスが起動するまでループで「ping」し、POST 要求を送信することをお勧めします。

于 2013-08-08T19:03:10.033 に答える
0

jqueryの使用を検討しましたか?

function ping () {
    $.ajax (
          <url>
        , {
              error:    function ( jqXHR, textStatus, errorThrown ) {
                        }
            , timeout:  5000    // in ms
            , type:     'POST'
          }
    }).done(function ( data, textStatus, jqxhr ) {
        // whatever
    }).fail(function ( jqxhr, textStatus, data ) {
        // note that the order of arguments is different from that of the success handler ('done') !
        if (textStatus === 'timeout') {
            ping();
        }
        else {
            // ... more error handling
        }
    });

詳細については、ドキュメントを参照してください。

于 2013-08-08T19:15:11.703 に答える