PHP / AJAX:每3秒获取网页内容,直到它改变


PHP / AJAX: Get web page content every 3 seconds until it changes

我有一个web服务器(www.domain.com),它正在ping一个子网web服务器(test.domain.com)显示的信息,直到它改变。我希望它每3秒运行一次检查,直到状态改变为等待消息之外的其他内容,然后我想在div中显示该信息。

我知道,我需要AJAX来运行这个不知何故,如果我想加载页面,然后有这个运行作为一个脚本,但我已经修改了也许2 AJAX脚本在我的生活和不知道去哪里与这一个。

下面的代码是我的测试基础PHP工作的基本工作流,但它完成所有的服务器端。

  $str = file_get_contents($url);
  $spanCount = preg_match_all("/'<span id'='"spanId'"'>(.*?)'<'/span'>/",$str,$span);
  $spanString = implode($span[0]);
  echo "<div class='status' style='display:inline;'>";
  while($spanString == "<span id='"spanId'">Waiting for stuffs...</span>"){
      echo "Waiting...";
      $str = file_get_contents($url);
      $spanCount = preg_match_all("/'<span id'='"spanId'"'>(.*?)'<'/span'>/",$str,$span);
      $spanString = implode($span[0]);
      sleep(3);
  }
    if($spanString != "<span id='"spanId'">Waiting for stuffs...</span>"){
      echo "<pre>";
      echo $spanString;
      echo "</pre>";
    }
  echo "</div>";

AJAX调用需要消耗整个网页的HTML吗?如果它是一个你控制的服务,允许AJAX对你的php脚本做一个GET,并让它返回一个JSON对象的数据将使事情变得非常简单。

get to status.php returns -> {status:"waiting", content: null} //do nothing
get to status.php returns -> {status:"waiting", content: null} //do nothing
get to status.php returns -> {status:"someawesomestate", content: "<blink><marquee>You're our 1,000,000th visitor!</marquee></blink>"} // grab content and update page

如果你有问题,使用JSONP可以让你很容易地跨域抓取数据。(jQuery驱动的例子)

$.getJSON('the/path/status.php').
  .done(function(json) {
    if(json.status != "waiting") {
      $('.some-container').html(json.content);
    }
  })
  .fail(function( jqxhr, textStatus, error ) {
    alert('something exploded.');
});