【问题标题】:PHP cURL returns old data when called multiple times from javascript从 javascript 多次调用 PHP cURL 返回旧数据
【发布时间】:2017-05-03 09:10:12
【问题描述】:

我尝试每 3 秒从服务器更新一次值,但使用以下代码时出现了非常奇怪的行为:

PHP函数

function getLocation($key, $car_id) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, "https://owner-api.teslamotors.com/api/1/vehicles/$car_id/data_request/drive_state");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Authorization: Bearer $key"
  ));
  $dat = curl_exec($ch);
  curl_close($ch);
  $result = json_decode($dat, true);
  $lat = $result['response']['latitude'];
  $long = $result['response']['longitude'];

  return array($long, $lat);
}

Javascript 调用:

<script>
function refreshLocation() { 
    try {
      <?php
        $loc = getLocation('someToken', 'someID');
      ?>
      pos = [<?php echo '"'.implode('","',$loc ).'"' ?>];
      pos[0] = parseFloat(pos[0].replace(",", "."));
      pos[1] = parseFloat(pos[1].replace(",", "."));
      console.log("Loc:" + pos[1] + " : " + (pos[0]));   
    }
    catch(err) {
    }
    setTimeout(refreshLocation, 3000);
  }
  </script>

问题是,无论服务器上的值如何变化,getLocation 函数总是返回与第一次执行时相同的值。只有刷新整个页面才能提供新值。 我看不到问题所在,也找不到令人满意的解决方案。我没有意识到 PHP 和 javascript 有问题吗?

【问题讨论】:

  • 您的代码不起作用。 PHP 在加载页面时只执行一次。使用api.jquery.com/jquery.ajax&调用api多次刷新
  • 那是因为在最初提供页面时会输出一次位置。如果您希望它是动态的,则需要每 3 秒异步调用一个单独的 PHP 脚本来检索新位置。

标签: javascript php curl


【解决方案1】:

您是否使用过第三方 Web 服务?他们可能会为具有相同参数和域的相同请求管理缓存。

我的意思是,如果您可以使用相同的参数调用 API,并且相同的域服务提供商会返回在您第一次调用时缓存的数据。

您需要在 cUrl 调用的标头中传递“Cache-Control: no-cache

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Authorization: Bearer $key",
    "Cache-Control: no-cache",
));

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多