我的ajax调用给了一个包含一些对象的Json对象,特别是一个对象'几何'带有类型和数组。 使用console.log,它会显示:
对象{类型:"点",坐标:数组[2]}
数组[-28.0833333333,-55.9166666667]
但是当我尝试显示或使用此数组的内容时,我得到一个未定义的语句。
这是我的ajax电话:
$.ajax({ //La requête ajax pour récupérer les données sous forme d'un tableau de Json
url: 'includes/query_ajax.php', //adresse du script php qui interroge la BDD
data: { terms : terms, database : database, condition : condition,host : host, dbname : dbname, user : user , password : password }, //la requete qu'on lui fait passer en paramètres
method: 'post',
success: function (data) { //La fonction callback qui sera exécutée une fois que la requête ajax sera terminée
//Cette fonction contient la création de la carte et l'affichage des icones tirés de la BDD
var iconFeatures=[];
var line;
var result=$.parseJSON(data);
for (var i=0; i<result.length; i++)//Cette boucle permet de récupérer chaque métadonnée issue de la BDD
{
var line=result[i]//Donne la ieme ligne de métadonnées //$.parseJSON(result[i])//Donne la ieme ligne de métadonnées
coord= line[0]; //On récupère les coordonnées, la hauteur, le nom et le type de volcan etc
ele= line[1];
name=line[2];
status=line[3]
var iconFeature = new ol.Feature({//Création d'un marqueur à partir des données précédentes
geometry: new ol.geom.Point([27, 27]).transform("EPSG:4326", "EPSG:3857"),
name: name ,
elevation: ele,
type: status,
population: 4000,
rainfall: 500
});
iconFeatures.push(iconFeature);//On ajoute ce marqueur à notre tableau de marqueur
}
我用来查询数据库的php函数以防万一:
$bdd = pg_connect("host=".$_POST['host']." dbname=". $_POST['dbname'] ." user=".$_POST['user']." password=".$_POST['password']);//Connexion à la BDD
if (!$bdd)
{
die('Error: Could not connect: ' . pg_last_error());
}
$query = "SELECT " . $_POST['terms'] . "FROM " . $_POST['database'];
$result = pg_query($query) or die('Connexion impossible : '.pg_last_error());//O interroge la BDD
if (!$result) //Dans le cas ou la requête n'a rien donné, probleme de connexion
{
echo "Une erreur s'est produite \n";
echo pg_last_error();
exit();
}
$res=array();//Initialisation du tableau de résultat
$fields = explode(',', $_POST['terms']);
$count= count($fields);
$j=0;
while($row = pg_fetch_assoc($result)) {//Boucle de récupération des données, tant qu'il reste des lignes de données
// $res[$j]=array();
$temp=array();
for ($i=0; $i<$count ;$i++)
{
if (trim($fields[$i])==trim('ST_AsGeoJSON(position) as geometry'))
{
$fields[$i]='geometry';
$$fields[$i] =json_decode($row['geometry']) -> {'coordinates'};
}
else
{
if (is_object(json_decode($row[trim($fields[$i])])))
{
$$fields[$i] =json_decode ($row[trim($fields[$i])]);
}
else
{
$$fields[$i] =($row[trim($fields[$i])]);
}
}
$temp[]=$$fields[$i];
}
$res[]=$temp;
}
echo json_encode($res);//On retourne le résultat sous forme d'un Json
pg_free_result($result);//On libère le tableau resultat
pg_close($bdd);//On ferme la connexion
然而它给我一个正确的Jsonobject,所以我不认为这是我的问题的原因。 我找到了解决问题的方法,但这是一个过于复杂的方法,我真的想知道问题出在哪里。
我希望我已经清楚了。我是Javascript的初学者,你可以看到,所以每一个改进我的代码的建议我们都会受到欢迎。
谢谢!
编辑:
以下是使用console.log(结果)的输出:
Array [ "[[6.85,50.1666666667],"West Eifel V…", "[{"type":"Point","coordinates":[2.9…", "[{"type":"Point","coordinates":[2.5…", "[{"type":"Point","coordinates":[-4.…", "[{"type":"Point","coordinates":[10.…", "[{"type":"Point","coordinates":[11.…", "[{"type":"Point","coordinates":[12.…", "[{"type":"Point","coordinates":[14.…", "[{"type":"Point","coordinates":[14.…", "[{"type":"Point","coordinates":[14.…", 1535 de plus… ]
我还展示了字符串化的coord变量,以确保数组不为空:
{&#34;类型&#34;:&#34;点&#34;&#34;坐标&#34;:[ - 26.6666666667,-57.0833333333]}
但似乎并非如此......
编辑2:
如果我尝试
的console.log(数据)
之前
var result
它显示:
[[[6.85,50.1666666667],&#34; West Eifel Volc 字段&#34;&#34; 600&#34;&#34;放射性碳&#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&# 34;:[2.9666666667,45.775]},&#34;锚链 DES Puys山脉&#34;&#34; 1464&#34;&#34;历史及#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&# 34;:[2.5333333333,42.1666666667]},&#34;奥洛特 Volc 字段&#34;&#34; 893&#34;&#34;全新世&#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&# 34;:[ - 4.0166666667,38.8666666667]},&#34;卡拉特拉瓦 Volc 字段&#34;&#34; 1117&#34;&#34;放射性碳&#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&# 34;:[10.8666666667,43.25]},&#34;拉尔代雷洛&#34;&#34; 500&#34;&#34;历史及#34],[{&#34;类型&#34;:& #34;点&#34;&#34;坐标&#34;:[11.9333333333,42.6]},&#34; Vulsini&#34;&#34; 800&#34;&#34;历史及#34; ],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&#34;:[12.7,41.7333333333]},&#34;阿尔 山&#34;&#34; 949&#34;&#34;全新世&#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&#34;:[14.1388888889,40.8272222222]},&#34;坎比 Flegrei&#34;&#34; 458&#34;&#34;历史及#34],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&# 34;:[14.4261111111,40.8213888889]},&#34;维苏威&#34;&#34; 1281&#34;&#34;历史及#34],[{&#34;类型&#34;:& #34;点&#34;&#34;坐标&#34;:[14.8333333333,39.4833333333]},&#34;帕利努罗&#34;&#34; -70&#34;&#34;放射性碳&#34 ],[{&#34;类型&#34;:&#34;点&#34;&#34;坐标&#34;:[13.8975,40.7333333333]},&#34;伊斯&#34;&# 34; 789&#34;&#34;历史及#34],[{&#34;类型&#34; [...]
黄色。