【发布时间】:2019-10-27 15:40:21
【问题描述】:
我通过带有 cURL 请求的 API 获得两个值(纬度、经度)。我的请求如下所示:
function APIcall($method, $url, $data){
$curl = curl_init();
switch ($method){
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// OPTIONS:
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'APIKEY: example-key-here',
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// EXECUTE:
$result = curl_exec($curl);
if(!$result){die("Connection Failure");}
curl_close($curl);
return $result;
}
$get_data = APIcall('GET',
'https://api.wheretheiss.at/v1/satellites/25544', false);
$response = json_decode($get_data, true);
此调用位于我的根文件夹中的单独文件apicall.php 中,然后我可以有效地将其包含在我需要的位置。当我这样做时,我使用$response 变量中给我的值来回显纬度和经度的值,这正是我需要的:
echo $response['latitude'];
echo $response['longitude'];
我在我的 Leaflet.js 地图的脚本标记内执行此操作,以在其上放置一个标记,位于 API 提供的坐标处:
mymap.setView([<?php echo $response['latitude']; ?>, <?php echo $response['longitude']; ?>], mymap.getZoom());
marker.setLatLng([<?php echo $response['latitude']; ?>, <?php echo $response['longitude']; ?>]);
这就是我的问题出现的地方。我上面的代码只放置一次标记,因为调用只进行一次(当然)。我将如何在不重新加载整个页面的情况下定期拨打更多电话?
【问题讨论】:
-
使用 ajax 将请求发送到后端脚本,然后将请求发送到 API 是一种选择 - 使用计时器设置它相当简单
-
@RamRaider 我试过这样的事情:
function repeatAjax(){ $.ajax({ type: "GET", url: 'apicall.php', success: function(resp) { console.log("Success"); }, complete: function() { setTimeout(repeatAjax,5000); } }); }我错过了什么?
标签: php ajax geolocation reload php-curl