0

これが私のコードです。

<script>
  function test(div_id) {
    var newMail = '<?php echo count_new_mail($id); ?>';
    setTimeout(test, 10000);
  }
  test();
</script>        

私がやりたいことは、php 関数 count_new_mail を 10 秒ごとに呼び出すことです。phpでjavascriptを作るとこんな感じになります。

var newMail = 1;

これは、php を実行し、count_new_mail の値が 1 になったためだとわかっています。この JavaScript を取得して、同じ値を保持するだけでなく、10 秒ごとに関数を呼び出すにはどうすればよいですか? または、php 関数を JavaScript 関数として記述し、それを呼び出して必要な結果を取得する必要がありますか?

4

1 に答える 1

3

PHP は常に JavaScript の前に動作するため、JavaScript を取得して PHP を再度実行させる唯一の方法は、別のリクエストを開始することです。JavaScript はXMLHttpRequest、より一般的には AJAX として知られている を使用して、新しいページに移動せずにリクエストを開始できます。JavaScript コードは次のようになります。

// For old versions of Internet Explorer, you need to catch if this fails and use
// ActiveXObject to create an XMLHttpRequest.
var xhr = new XMLHttpRequest();
xhr.open("GET" /* or POST if it's more suitable */, "some/url.php", true);
xhr.send(null);  // replace null with POST data, if any

これでリクエストは問題なく送信されますが、結果のデータも取得する必要があるでしょう。そのためには、コールバックを設定する必要があります (おそらく を呼び出す前にsend):

xhr.onreadystatechange = function() {
    // This function will be called whenever the state of the XHR object changes.
    // When readyState is 4, it has finished loading, and that's all we care
    // about.
    if(xhr.readyState === 4) {
        // Make sure there wasn't an HTTP error.
        if(xhr.status >= 200 && xhr.status < 300) {
            // It was retrieved successfully. Alert the result.
            alert(xhr.responseText);
        }else{
            // There was an error.
            alert("Oh darn, an error occurred.");
        }
    }
};

注意すべきことの 1 つは、要求を開始sendするだけであるということです。完了するまで待機しません。場合によっては、それに対応するためにコードを再構築する必要があります。

于 2013-03-10T07:21:56.677 に答える