2016-07-11 8 views
0

私の主な言語はCであるので、私はポインタに慣れていて、私はそれらを愛しています。今、私はJavascriptで完成させる必要があるプロジェクトがあり、解決方法がわからない問題があります。JSの変数の値を格納

GETリクエストから取得した変数の値を保存します。 PHPページにGETを送信するスクリプトがあり、Cで書かれたデーモンにGETを送信します。私が望む文字列を取得したら、lengthを使用して、次に取得する文字列のサイズを測定します。 URLパラメータとして取得したバイト数を送信します。

window.onload = function() { 
    if (bytes === undefined) { 
    var bytes = 0; 
    } 
    var url = "/test/log.php?q=" + bytes; 

    function httpGet(url) { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.open("GET", url, true); 
    xhttp.onload = function(e) { 
     if (xhttp.readyState === 4) { 
     if (xhttp.status === 200) { 
      console.log(xhttp.responseText); 
      var option = ""; 
      obj = JSON.parse(xhttp.responseText); 
      for (var key in obj) { 
      option += obj[key]; 
      } 

      document.getElementById("list").innerHTML = asdf; 
      bytes = option.length; 
     } 
     }; 
     xhttp.onerror = function(e) { 
     console.error(xhttp.statusText); 
     } 
    }; 

    xhttp.send(); 
    } 

    var updateInterval = 2000; 

    function update() { 
    httpGet(url); 
    setTimeout(update, updateInterval); 
    } 

    update(); 
} 

したがって、変数bytesに注目しています。スクリプトが最初に呼び出されたときに値0を持たなければならず、すべてのループ(2秒ごとにループし、コードにループを表示しませんでした)の後に、受け取った文字列の前の長さの値を持つ必要があります。

+0

ページは2秒ごとにリロードされますか? –

+4

* "コードにループを表示していない" * - まあ、そうすべきです。 – JJJ

+0

@Juhanaよかったよ。今何? – Mirakurun

答えて

1

あなたはちょうどそれが常に0

window.onload = function() { 
 
    if (bytes === undefined) { 
 
    var bytes = 0; 
 
    } 
 
    var url = "/test/log.php?q="; 
 

 
    function httpGet(url) { 
 
    var xhttp = new XMLHttpRequest(); 
 
    xhttp.open("GET", url, true); 
 
    xhttp.onload = function(e) { 
 
     if (xhttp.readyState === 4) { 
 
     if (xhttp.status === 200) { 
 
      console.log(xhttp.responseText); 
 
      var option = ""; 
 
      obj = JSON.parse(xhttp.responseText); 
 
      for (var key in obj) { 
 
      option += obj[key]; 
 
      } 
 

 
      document.getElementById("list").innerHTML = asdf; 
 
      bytes = option.length; 
 
     } 
 
     }; 
 
     xhttp.onerror = function(e) { 
 
     console.error(xhttp.statusText); 
 
     } 
 
    }; 
 

 
    xhttp.send(); 
 
    } 
 

 
    var updateInterval = 2000; 
 

 
    function update() { 
 
    httpGet(url + bytes); 
 
    setTimeout(update, updateInterval); 
 
    } 
 

 
    update(); 
 
}
になるときに、ページのロード時に一度だけ呼び出しごとに変わりはなく、方法であなたのurlにバイトのparamを追加することを確認する必要があります

+0

最後に!ありがとう、作品は完璧です。 – Mirakurun

-1

私は、関数が呼び出されたときにその値を空にしないコンテキストで変数を宣言します。したがって、関数の前に変数 "バイト"を宣言し、その関数をループすることができます。この場合、変数は上書きするまで最後の値を保持します。

これでうまくいくはずです。

+0

私はすでにそれをしたと思います if(bytes === undefined){ var bytes = 0; } – Mirakurun

+0

あなたは関数の中ではなく関数の外に変数を宣言しなければなりません。このようにして、変数のスコープは、関数呼び出しが終了すると終了します。したがって、2番目のループからその関数にアクセスすることはできません。 – Zerok

+0

解決策が見つかりました。とにかくありがとう。 – Mirakurun

0

代わりのURLの固定値関数にそれを作ると、それは常にバイトの修正バージョンと現在のURLをあなたを与えるだろう、あなたはそれを

を変更する場合にのみ、この部分

を変更する必要があります
var url = ... 
// to 
function getUrl() { 
    return "/test/log.php?q=" + bytes; 
} 

... 
// and 
xhttp.open("GET", url, true); 
// to 
xhttp.open("GET", getUrl(), true); 
+0

これはまったく機能しません。 GETリクエストを送信しません。 – Mirakurun

+0

@Mirakurunこれは完全なコード例ではなく、ちょうどあなたが変更する必要があります.. – webdeb

+0

まあ、私は馬鹿ではありません。わかった、私はそれを変更し、それは単に動作しません。しかし、nvm、上記の答えは私の問題を解決しました。 – Mirakurun

関連する問題