【问题标题】:PHP / AJAX: Get web page content every 3 seconds until it changesPHP / AJAX:每 3 秒获取一次网页内容,直到它发生变化
【发布时间】:2014-06-19 17:05:15
【问题描述】:

我有一个网络服务器 (www.domain.com),它正在 ping 子网网络服务器 (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>";

【问题讨论】:

  • 除非您使用 CORS,否则 AJAX 将不起作用,因为发送/接收服务器的域不同。
  • 相关信息?如果我将其更改为每 3 秒对我的另一台服务器进行一次 curl 调用,并让另一台服务器通过 curl 返回信息,该怎么办?
  • 我希望我会尝试在 setInterval 中放置一个 AJAX 调用,该调用在加载当前页面的同一台服务器上执行脚本,并且该服务器脚本对另一台服务器执行 ping,并将响应发送回页面。
  • @bloodyKnuckles 我认为这不适用于此工作流程,因为内容不会总是在 www 请求时推送回 www

标签: javascript php jquery ajax


【解决方案1】:

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

【讨论】:

  • 它实际上是在成功的“someawesomestate”中返回的 XML。在等待中显示的纯文本。我要测试一下你的建议!
  • 如果不是json响应,getJSON是不行的!它可以是包装在 json 响应中的 xml 字符串,但要让 getJSON(p) 正常工作,您肯定需要给 ajax 回调一大块 json
  • 是的,我将尝试更改我的 test.domain.com 以提供 JSON。 (它是用 C# 编写的,这对我来说是新的,所以我们会看到)。全天学习新东西!
  • 您的示例仍然会由 PHP 触发,因此在 someawesomestate 得到响应之前页面不会完全加载,对吧?
  • 带有容器和默认文本的页面被传送到浏览器。然后浏览器轮询服务器,当它收到一个有效载荷时,它会更新 dom。让我快速整理一下。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多