从ajax调用PHP / curl api获取请求,返回PHP文件内容

时间:2019-05-09 04:19:44

标签: javascript php ajax curl

我正在尝试将ajax请求从我的站点传递到包含curl命令的php文件,以将数据从api检索回我的站点。我这样做是因为我需要传递api密钥才能访问数据。

显示的代码当前正确返回了Google时区内容,但是当ajax调用运行时,我只是将php文件的内容(原始代码)恢复了。

我尝试直接在浏览器中打开php文件,并且可以选择下载文件,因此代码未执行。我还通过终端检查了我的PHP版本(7.1.23)。

javascript代码:

var apicall = 'https://maps.googleapis.com/maps/api/timezone/json?location=' + locTime + '&timestamp=' + timestamp + '&key=' + apikey;

var xhr = new XMLHttpRequest();
xhr.open('GET', apicall, true);
xhr.onreadystatechange = function () {
  var DONE = 4;
  var OK = 200; 
  if (xhr.readyState === DONE) {
    if (xhr.status === OK) {
      console.log(xhr.responseText);

      var jqxhr = $.ajax( "js/curl.php" )
        .done(function(data) {
          alert( "success" );
          console.log(data);
        })
        .fail(function() {
          alert( "error" );
        });

    } else {
      alert ('Error: ' + xhr.status);
    }
  }
};
xhr.send();

curl.php:

<?php
function callAPI($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(
    'api-auth:1111111111111111111111',
    '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 = callAPI('GET', 'https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json'.$user['User']['customer_id'], false);
$response = json_decode($get_data, true);
$errors = $response['response']['errors'];
$data = $response['response']['data'][0];
?>

诚然,我是一个非常喜欢PHP / curl的新手,所以这很明显,但是我已经快要尝试了。任何帮助/建议将不胜感激。

0 个答案:

没有答案