Javascript PHP/AJAX:每3秒获取一次网页内容,直到它发生变化

Javascript PHP/AJAX:每3秒获取一次网页内容,直到它发生变化,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个web服务器(www.domain.com),它正在ping子网web服务器(test.domain.com)以获取显示的信息,直到它发生更改。我希望它每3秒钟运行一次此检查,直到状态更改为除等待消息之外的其他内容,然后我希望在div中显示该信息 我知道,如果我想加载页面并将其作为脚本运行,我将需要AJAX以某种方式运行它,但我在生活中修改了2个AJAX脚本,不知道如何使用它 下面的代码是我的测试基础PHP,它适用于基本工作流,但它在服务器端完成所有工作 $str = file_ge

我有一个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>";
$str=file\u get\u contents($url);
$spanCount=preg\u match\u all(“/\(.*?\/”,$str,$span);
$spanString=内爆($span[0]);
回声“;
而($spanString==“等待资料…”){
回声“等待…”;
$str=文件获取内容($url);
$spanCount=preg\u match\u all(“/\(.*?\/”,$str,$span);
$spanString=内爆($span[0]);
睡眠(3);
}
如果($spanString!=“等待资料…”){
回声“;
回音$spanString;
回声“;
}
回声“;

AJAX调用是否需要使用整个网页的HTML?如果这是一个由您控制的服务,那么允许AJAX访问您的php脚本并让它返回JSON数据对象将使事情变得非常简单

$.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.');
});

除非您使用CORS,否则AJAX不适用于此,因为发送/接收服务器的域是不同的?如果我将此更改为每3秒对另一台服务器执行一次curl调用,并让另一台服务器通过curl返回信息,会怎么样?我希望尝试在setInterval中执行一个AJAX调用,该调用在加载当前页面的同一台服务器上执行脚本,并且该服务器脚本对另一台服务器执行ping操作,并将响应发送回页面。@bloodyKnuckles我认为这不适用于此工作流,因为内容不会总是在www请求时返回到www,它实际上是以成功的“somesomestate”返回的XML。正在等待中显示的纯文本。我要检验一下你的建议!如果不是json响应,getJSON将无法工作!它可以是打包在json响应中的xml字符串,但是为了让getJSON(p)正常工作,您肯定需要为ajax回调一大块JSONYAH,我将尝试更改test.domain.com以提供json。(它是用C#写的,这对我来说是新的,我们拭目以待)。整天学习新东西!不过,您的示例仍然会由PHP触发,因此页面在someawesomestate响应之前不会完全加载,对吗?带有容器和默认文本的页面会传递到浏览器。然后浏览器轮询服务器,当它收到有效负载时更新dom。让我凑一把快小提琴。
$.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.');
});