【问题标题】:Making AJAX Post Requst to PHP Routine to Local File对 PHP 例程的 AJAX 发布请求到本地文件
【发布时间】:2021-09-02 11:23:35
【问题描述】:

我有一个如下所示的 AJAX 请求文件:

$.ajax({
        url: 'libs/php/getCountryBorder.php',
        type: 'POST',
        dataType: 'json',
        data: {
            name: 'Bahamas',
        },
        success: function (response) {
            console.log(response);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        },
    });

我还有一个 geojson 文件,看起来像这样:

你可以在这里查看我本地的geojson文件Geojson File

这是我对本地文件 geo.json 文件的 PHP 例程调用:

  ini_set('display_errors', 'On');
  error_reporting(E_ALL);

  $url = 'https://stephenorowole.co.uk/vendors/countryBorder/countryBorders.geo.json?&name=' . $_REQUEST['name'];

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_URL, $url);

  $response = curl_exec($ch);
  curl_close($ch);
  $jsonResponse = json_decode($response, true);

  $output['data'] = $jsonResponse['features'];
  header('Content-Type: application/json; charset=UTF-8');
  echo json_encode($output);

?>

因此,我从另一个文件对 php 进行了 Ajax 调用,以仅获取 json 文件中的特定名称。它不仅返回名称数据,还返回 json 文件中的所有数据。我想要的是通过请求返回的json中的特定数据。 我不知道如何使用本地文件执行此操作。如果我使用外部 API,这对我来说很容易。

在外部 API 中,如果请求仅返回与特定纬度和经度匹配的国家/地区,则将针对该特定请求返回特定数据。但是,当我使用本地文件时,我不知道如何实现这一点。

我希望能够在拨打电话时根据作为请求数据提供的国家/地区名称获取国家/地区的几何形状。我刚刚添加了 ajax 调用。

任何帮助将不胜感激。

【问题讨论】:

  • 您将不得不自己进行数据提取。即遍历记录以找到您想要的记录。
  • 好的,假设我想让一个 ajax 获取单独的名称列表和另一个 ajax 请求来获取特定于该名称的几何,我是否需要为每个请求创建不同的 php 文件。跨度>
  • 请将您的代码作为文本而不是代码的图像添加到问题中

标签: javascript php ajax curl


【解决方案1】:

显然,使用 set 参数向本地文件发出请求是行不通的,因为没有编写后端代码来处理特定数据的 http get 请求。 我只能通过添加到我上面的 php 代码中来从本地 json 文件中获取特定数据。

这是我从 geojson 文件中获取特定数据的新完整 php 代码:

<?php
  ini_set('display_errors', 'On');
  error_reporting(E_ALL);

  $url = 'https://stephenorowole.co.uk/vendors/countryBorder/countryBorders.geo.json';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_URL, $url);

  $response = curl_exec($ch);
  curl_close($ch);
  $jsonResponse = json_decode($response, true);


 $output = null;
  foreach($jsonResponse['features'] as $data){
    if($data['properties']['name'] == $_REQUEST['name']){
      $output['data'] = $data;
      break; 
    };
  };

  header('Content-Type: application/json; charset=UTF-8');
  echo json_encode($output);

?>

这是 php 文件中的代码片段:

  foreach($jsonResponse['features'] as $data){
    if($data['properties']['name'] == $_REQUEST['name']){
      $output['data'] = $data;
      break; 
    };
  };```

【讨论】:

    【解决方案2】:

    如果您在本地只有一个本地(完整)json 文件作为本地数据库,您将不得不手动构建结果 json。

    我不确定我是否掌握了你想要实现的目标,你能分享你的电话吗?

    您不直接在 Ajax 调用中调用 API 有什么原因吗?看来您在 PHP 调用中做得并不多……

    【讨论】:

    • 我希望能够在拨打电话时根据作为请求数据提供的国家名称获取国家的几何形状。我刚刚添加了 ajax 调用
    • 在这里添加了评论。为什么不直接在 ajax 调用中调用 API?你似乎没有在你的 php 中做太多事情,它会简化逻辑。正如我所说,如果您不想多次调用 API 而是利用存储在服务器上的 json 文件,那么您别无选择,只能遍历它并手动构建响应,我不鼓励这样做。
    • 我只是按照我导师的指导。即使我直接拨打电话,我仍然需要找到一种基于特定名称(例如加拿大)提出请求的方法
    • 目前尚不清楚。此时我们如何为您提供帮助。运行代码时看到了什么?
    • 正如我在问题中提到的,它返回整个 json 数据
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多