【问题标题】:Pass json array from PHP to JS将 json 数组从 PHP 传递给 JS
【发布时间】:2018-02-02 04:49:56
【问题描述】:

我需要将 json 数组从 php 脚本发送到 Javascript。

 <?php
//controllo se sono presenti i parametri
if(isset($_GET['ID_utente']) && isset($_GET['Longitudine']) && isset($_GET['Latitudine']))
{
//Recupero il valore dei parametri
$ID_utente = $_GET['ID_utente'];
$Longitudine = $_GET['Longitudine'];
$Latitudine = $_GET['Latitudine'];
}

//eseguo la connessione al database sul server locale
//inserendo nome utente e password
$conn = mysql_connect('localhost', 'realegr', 'rabredugbo19');
 
//gestione degli errori
// if (!$conn) {die('Impossibile connettersi: ' . mysql_error());}
 
//seleziono il databse
mysql_select_db("my_realegr") or die( "Impossibile selezionare il database.");
 
//creo una stringa sql di inserimento con i valori
//recuperati dall'url
$sql = "INSERT INTO `my_realegr`.`DatiSinistro`
(
`ID_sinistro` ,
`Tempo_Server` ,
`Tempo_Locale` ,
`ID_utente`,
`Longitudine`,
`Latitudine`
)
VALUES
(
NULL , CURRENT_TIMESTAMP , NULL , '" . $ID_utente . "', '" . $Longitudine . "', '" . $Latitudine . "')
";

$q = "SELECT Longitudine, Latitudine FROM DatiSinistro ORDER by ID_sinistro 
DESC LIMIT 1";
$result = mysql_query($q, $conn);

    if($row = mysql_fetch_assoc($result)) {
         echo json_encode([
           'status' => true,
           'latitude' => $row['Latitudine'],
           'longitude' => $row['Longitudine'],
         ]);
    }




 
//gestione degli errori
if(! $result ){die('Impossibile eseguire la query: ' . mysql_error());}
 
//chiudo la connessione al db
mysql_close($conn);

?>

<!DOCTYPE html>
<html>
  <head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>   
   

        <script async defer 
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBkEtPH07_xBVh8dWBzCQYtWimkOUnPGMQ&callback=initMap"></script>
    
    <style>
       #map {
        height: 400px;
        width: 100%;
        
       }
    </style>
  </head>
  <body>
    <h3>My Google Maps Demo</h3>
    <div id="map"></div>    
    
    <script>
function initMap(){
  


     var $request = $.get('http://realegr.altervista.org/ProvaReale1.php');
     $request.done( function(data) {
     alert(data);
          var pasedData = JSON.parse(data);
          alert(pasedData.latitude);
 
          
     var uluru = {lat: pasedData.latitude, lng:pasedData.longitude};
     var map = new google.maps.Map(document.getElementById('map'), {
              zoom: 4,
              center: uluru
                                                                   });
     var marker = new google.maps.Marker({
              position: uluru,
              map: map
                                          });
              
})
}
</script>
    
    

  </body>
</html>

php脚本的输出:

当我加载地图时,alert(data) 显示:{"status":true,"latitude":"45.062583","longitude":"7.662160"}

所以 PHP 脚本似乎运行良好,此外 Javascript 还接收 JSON 数组 使用“var pasedData = JSON.parse(data);”我得到一个解析的数组吗? 当我尝试使用 alert(pasedData[0]) 显示内容时,它显示“未定义”。出了什么问题?

【问题讨论】:

  • 使用pasedData.status、pasedData.latitude和pasedData.longitude
  • 嗨亲爱的你的输出不在JSON数组{"status":true,"latitude":"45.062583","longitude":"7.662160"}如果你的输出像这样[{"status":true,"latitude":"45.062583","longitude":"7.662160"}]那么你可以像这样使用pasedData[0]

标签: php jquery json


【解决方案1】:

使用pasedData.statuspasedData.latitudepasedData.longitude

更新

请使用此代码

<script>
function initMap(){
  //
}
</script>

并将initMap 的代码放入此函数中。

更新 2

请使用此代码

var pasedData = JSON.parse(data);
var longi = parseFloat(pasedData.longitude);
var lati = parseFloat(pasedData.latitude);
var uluru = {lat: lati, lng:longi};

【讨论】:

  • 谢谢。但现在在控制台我有一个新错误:fc {message: "initMap is not a function", name: "InvalidValueError", stack: "Error↵ at new fc (@987654321 @…_xBVh8dWBzCQYtWimkOUnPGMQ&callback=initMap:136:68"} 任何提示??(我已更改脚本)
  • 你的脚本标签中有函数initMap()吗?这是javascript函数。
  • 我更新了脚本(如果我理解你的意思)。现在它给了我这些错误: InvalidValueError: setCenter: not a LatLng or LatLngLiteral: in property lat: not a number; InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number
  • 您能否更新您的问题中的代码以便我看到?
  • 已经完成。无论如何这很奇怪,因为这些值已经被解析了:S
【解决方案2】:

使用. 运算符进行访问,而不是像数组索引一样尝试它。 它会工作。可以在浏览器控制台中尝试以下示例。

var data = '{"status":true,"latitude":"45.062583","longitude":"7.662160"}';
var t = JSON.parse(data);
console.log(t.status);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 2017-09-03
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    相关资源
    最近更新 更多