【发布时间】:2021-10-15 23:16:41
【问题描述】:
我正在尝试使用 jQuery/ajax 让我的 <select> 元素由我的 JSON 文件中列出的国家/地区名称填充。
<div id="navbar">
<label for="countrySelect">Select a country from the list:</label>
<select id="countrySelect" name="countrySelect">
<!--<option>...</option>-->
</select>
</div>
--
$(document).ready(function() {
console.log("Select Function Loaded.");
$.ajax({
url: 'libs/php/getCountryISO.php',
type: 'POST',
dataType: 'json',
success: function(data) {
console.log(JSON.stringify(data));
console.log("JSON stringified");
//$.each(data, function(key, countryName) {
//var option = new Option(countryName, countryName);
//$(option).html(countryName);
//$("#countrySelect").append(option);
//})
}});
});
--
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$executionStartTime = microtime(true);
$url='project1\libs\json\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);
$result=curl_exec($ch);
curl_close($ch);
$decode = json_decode($result,true);
$output['status']['code'] = "200";
$output['status']['name'] = "ok";
$output['status']['description'] = "success";
$output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . " ms";
$output['data'] = $decode[''];
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($output);
?>
--
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"Bahamas","iso_a2":"BS","iso_a3":"BHS","iso_n3":"044"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]]],[[[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]]],[[[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]]]]}},{"type":"Feature","properties":{"name":"Canada","iso_a2":"CA","iso_a3":"CAN",
我想访问数据 "name": "Bahamas" 键和值对(本质上每个名称都是一个国家名称,所以对就像 "name':'United Kingdom")并在 <select> 元素中将它们中的每一个都设为 <option>我的 HTML。
我不知道在$decode 部分放什么,因为'type' 或'features' 都不起作用。代码 console.log(JSON.stringify(data)); 没有记录,我注释掉了我的代码的 $.each 部分,只是为了尝试让它的前半部分工作。
【问题讨论】:
-
你能分享一个更准确的
data的例子吗? -
嗨,我想我明白你的意思了,我添加了更多的 JSON 文件内容来显示数据。我还在我的项目中添加了一个 PHP 文件,以尝试帮助进一步解码 JSON 文件
-
@Kizzy:你是说 PHP 代码抛出错误并且没有返回预期的数据?如果是这种情况,那么这实际上与问题中的问题无关,因为服务器端出现故障。
-
project1\libs\json\countryBorders.geo.json是您服务器上的本地文件,对吗?问题一:为什么要使用curl来读取本地文件?问题 2:为什么首先使用 PHP 代理脚本将本地文件发送到浏览器?让客户端直接下载该文件,而不是通过PHP来获取它不是更容易吗? -
@Kizzy: “我认为我认为 jQuery/javascript 能够解析 JSON 文件中的数据可能是错误的” - JSON 代表“JavaScript Object Notation ",它可以被 JavaScript 原生读取。听起来你此时的努力过于复杂了。如果您不需要 PHP 参与,那么我建议您只在 AJAX 操作中获取 JSON 文件本身。
标签: html jquery json ajax curl