У меня есть веб-сайт, и я хочу нанести несколько точек на карту.
Мои очки хранятся в базе данных, и я вызываю их из PHP, чтобы получить набор данных. Эта часть отлично работает:
connexion.php
<?php
function connectBdd(){
$host_bdd='localhost';
$name_bdd='TBMigrateurs';
$user_bdd='postgres';
$pass_bdd='eptbmig';
try{
$bdd = new PDO ("pgsql:host = ".$host_bdd.";dbname = ".$name_bdd."", "".$user_bdd."", "".$pass_bdd."") or die(print_r($bdd->errorInfo()));
$bdd->exec("SET NAMES utf8");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(Exeption $e){
die("Erreur!".$e->getMessage());
}
// On récupère les données
$reponse = $bdd->query('SELECT * FROM ouvrages');
//On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
$latitude[] = $donnees['xl93'];
$longitude[] = $donnees['yl93'];
}
$reponse->closeCursor(); // Termine le traitement de la requête
echo (string)$latitude[5];
//echo $longitude[0];
}
?>
Широта моей 5-й точки правильно нанесена на странице. Теперь я хочу поймать это в Javascript благодаря Ajax:
map.js
// création de l'objet xhr
var ajax = new XMLHttpRequest();
// destination et type de la requête AJAX (asynchrone ou non)
ajax.open('POST', 'connexion.php', true);
ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
ajax.addEventListener('load', function(e) {
// si l'état est le numéro 4 et que la ressource est trouvée
if (ajax.readyState == 4 && ajax.status == 200) {
// le texte de la réponse
var lat = ajax.responseText;
console.info(lat);
}
});
// envoi de la requête
ajax.send();
А здесь "lat" пусто, а значение в PHP все еще отображается на моем веб-сайте. Мне кажется, что AJAX не знает, что нужно брать из файла PHP, поэтому ничего не требуется.
Кто-нибудь знает, почему мой ajax.responseText пуст? Спасибо
РЕДАКТИРОВАТЬ
Я упомянул только те части кода, в которых есть проблемы. Connexion.php вызывается из файла index.php, который строит карту.
<!DOCTYPE html>
<html>
<head>
<!-- appel du style de la librairie leaflet-->
<link rel = "stylesheet" href = "https://unpkg.com/[email protected]/dist/leaflet.css" />
<!-- appel du style créé sur le poste-->
<link rel = "stylesheet" href = "accueil.css" />
<!-- appel de la librairie leaflet-->
<script src = "https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<!-- appel du js créé sur le poste-->
<script src = "map.js"></script>
<!--<script src = "leaflet-providers.js"></script>-->
<meta charset = "utf-8">
</head>
<body>
<header>
<h1> Tableau de bord de la continuité écologique </h1>
</header>
<div id = "mapid">
<!-- la carte-->
</div>
<p>Ici</p>
<div id = "pays">Pays </div>
<p> La </p>
<?php
include 'connexion.php';
connectBdd();
?>
</body>
</html>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш PHP-код никогда не звонкиconnectBdd, он просто определяет его. Вам нужно назвать это, например:
connectBdd();
в конце файла.
Также обратите внимание, что ваш вызов XHR вызывает connexion.php, но ваш комментарий в верхней части блока кода говорит, что он называется connection.php.
Действительно, эта функция вызывается моим основным файлом, извините. Я отредактировал свой пост, добавив в него файл "index.php". Более того, это "connexion.php", вы правы. Так что проблема не отсюда /
Ну, я все смешивал ... Я хочу добавить переменные PHP в свой файл javascript.
Я попытался сделать это с помощью ajax, в то время как ajax отправляет переменные Javascript в PHP (я хочу сделать наоборот).
Так что это не могло сработать. Выкладываю решение, если кому-то нужно. Я создал функцию javascript, которую я вызываю из PHP, с моими переменными PHP в качестве параметров.
Для каждой координаты я вызываю функцию js, которая рисует точку на карте.
Connexion.php
// On récupère les données
$reponse = $bdd->query('SELECT * FROM ouvrages');
//On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
//coordonnees de l'ouvrage
$latitude = $donnees['xl93'];
$longitude = $donnees['yl93'];
$impact = $donnees['impact'];
?>
<script type = "text/javascript" src = "l93_to_wgs84.js"></script>
<script type = "text/javascript" src = "map.js"></script>
<script type = "text/javascript">
affichage_ouvrage(lambert93toWGPS('<?PHP echo $latitude;?>','<?PHP echo $longitude;?>')['latitude'],lambert93toWGPS('<?PHP echo $latitude;?>','<?PHP echo $longitude;?>')['longitude'],'<?PHP echo $impact;?>');
</script>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
?>
map.js
function affichage_ouvrage(latitude,longitude,impact){
if (impact == 'Faible'){
var ouvrage = L.marker([latitude,longitude],{icon: blueSmallIcon}).addTo(map);
}
else if (impact == 'Moyen'){
var ouvrage = L.marker([latitude,longitude],{icon: greenSmallIcon}).addTo(map);
}
else if (impact == 'Fort'){
var ouvrage = L.marker([latitude,longitude],{icon: orangeSmallIcon}).addTo(map);
}
else if (impact == 'Tres_fort'){
var ouvrage = L.marker([latitude,longitude],{icon: redSmallIcon}).addTo(map);
}
else {
var ouvrage = L.marker([latitude,longitude],{icon: unvisiSmallIcon}).addTo(map);
}
ouvrage.bindPopup("Hi there !");
}
Если только «... и значение PHP все еще отображается на моем веб-сайте». не означает, что вы видите что-то, что указывает на то, что код в файле PHP действительно запущен, и в этом случае вы должны оставить часть файла в вопросе (или, возможно, это ошибка наблюдения?).