Javascript 将json数组从PHP传输到JS

Javascript 将json数组从PHP传输到JS,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我正在尝试将一个json数组从PHP传输到JS 将您的“PopolamentoTabella.php”更改为 <?php $servername = "localhost"; $username = "YOURUSERNAME"; $password = "YOURPASSWORD"; $dbname = "YOUR DB"; // Create connection, $conn = mysqli_connect($servername, $username, $password,

我正在尝试将一个json数组从PHP传输到JS


将您的“PopolamentoTabella.php”更改为

<?php
$servername = "localhost";
$username = "YOURUSERNAME";
$password = "YOURPASSWORD";
$dbname = "YOUR DB";

// Create connection,
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
//echo "Connected successfully\n";
//controllo se sono presenti i parametri
if (isset($_GET['id_utente']) && isset($_GET['longitude']) && isset($_GET['latitude'])) {
//Recupero il valore dei parametri
    $id_utente = $_GET['id_utente'];
    $longitude = $_GET['longitude'];
    $latitude = $_GET['latitude'];

// Insert Data
    $sql = "INSERT INTO Prova (id_utente, latitude, longitude)
VALUES ('" . $id_utente . "', '" . $longitude . "', '" . $latitude . "')
";

    if (mysqli_query($conn, $sql)) {
        //echo "New record created successfully\n\r";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
} else {
// Execute query and save it in result
    $sql = "SELECT  latitude,longitude FROM Prova ORDER by reg_date DESC LIMIT 1";
    $result = mysqli_query($conn, $sql);
//if (mysqli_num_rows($result) > 0) {
    // output data of each row
    /* while($row = mysqli_fetch_assoc($result)) {
      echo "latitude: " . $row["longitude"]. " - longitude: " . $row["latitude"]. "<br>";
      }
      } else {
      echo "0 results";
      }
     */

    $row = mysqli_fetch_assoc($result);
    echo json_encode([
        'status' => true,
        'latitude' => $row["longitude"],
        'longitude' => $row["latitude"],
    ]);
}
//echo $longitude; 
mysqli_close($conn);
?>

将如此详细的错误消息回显给客户端通常不是一个好主意。您正在泄露数据库的结构,以及可能对恶意用户有价值的其他信息。而是发送HTTP 500(内部服务器错误)响应和一般消息,并将真正的异常记录到服务器上的私有日志文件中,您可以在其中检查调试信息。另外,正如其他人所指出的,错误消息没有以JSON格式发送,这导致jQuery在尝试将其解析为JSON时出现问题。错误的根本原因是GET请求中没有向服务器发送任何数据,并且服务器没有正确验证这一点(它使用isset检查GET值,但只是为了创建一些变量。如果没有设置这些值,它仍然会尝试继续执行其余的代码,当然数据库无法处理空变量。相反,它应该发送400个错误的请求响应,最好包含一些详细说明val的JSON对象初始化错误,以便调用方能够修复它们。除了这些错误逻辑之外,还有一个罪过,那就是您的代码容易受到SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。对风险进行了解释,如下所示:以及一些如何使用PHP/mysqli安全地编写查询的示例。一旦对所有这些进行排序,它仍然无法解析JSON响应,因为完全不必要的
echo“New record created successfully\n\r”
line。同样,这不是JSON编码的,在这样的机器对机器的交互中也是完全多余的(ajax请求来自浏览器,而不是直接来自人,在这种情况下是处理数据而不是人可读的文本)-客户端应假定请求的操作成功,除非您返回指示错误条件的HTTP响应代码(例如,400、500、403、404和类似情况)。最后一件事-似乎最后一条SELECT语句有点毫无意义-它只是复制用户插入数据库的相同数据(希望如此,除非同时有很多请求,在这种情况下,因为您没有使用事务,所以可能不会)。您可以完全跳过此操作,并且假设插入没有失败,只需返回请求中最初给出的纬度和经度。事实上,您甚至不必这样做,因为调用方已经知道这些值。他们只需要HTTP 200 OK响应就可以知道插入成功。