当从javascript多次调用时,PHP cURL返回旧数据

当从javascript多次调用时,PHP cURL返回旧数据,javascript,php,curl,Javascript,Php,Curl,我试图每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_RET

我试图每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>

函数refreshLocation(){
试一试{
pos=[];
pos[0]=parseFloat(pos[0]。替换(“,”,”);
pos[1]=parseFloat(pos[1]。替换(“,”,”);
log(“Loc:+pos[1]+”:“+(pos[0]));
}
捕捉(错误){
}
设置超时(刷新位置,3000);
}
问题是,无论服务器上的值如何更改,getLocation函数总是返回与第一次执行时相同的值。只有整个页面的刷新才会给出新值。
我看不出问题所在,也找不到令人满意的解决方案。我不知道PHP和javascript有什么问题吗?

您使用过第三方Web服务吗?它们可能会使用相同的参数和域为相同的请求管理缓存

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

您需要在cUrl调用的头中传递“缓存控制:无缓存”

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

你的代码不起作用。加载页面时,PHP只执行一次。使用并调用api多次刷新,这是因为在最初提供页面时,位置只输出一次。如果您希望它是动态的,您需要每3秒异步调用一个单独的PHP脚本来检索新位置。谢谢!好吧