我正在构建一个传单Web应用程序,该应用程序存储分配给地理位置的消息。
我通过使用以下方式将数据从javascript发送到PHP来一次添加一行数据:
$name = mysqli_real_escape_string($conn, $_POST['NAME']);
$latitude = mysqli_real_escape_string($conn, $_POST['LATITUDE']);
$longitude = mysqli_real_escape_string($conn, $_POST['LONGITUDE']);
$message = mysqli_real_escape_string($conn, $_POST['MESSAGE']);
$sql = "INSERT INTO geoData (NAME,LATITUDE,LONGITUDE,MESSAGE)
VALUES ('$name', '$latitude', '$longitude', '$message')";
我使用PHP取回数据,以使用以下命令将数据回显到javascript:
$conn = mysqli_connect($dbServername,$dbUsername, $dbPassword, $dbName);
if(! $conn ){
die('Could not connect: ' . mysqli_error());
}
$sql = 'SELECT * FROM geoData';
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
} else {
echo "0 results";
}
mysqli_close($conn);
<script type="text/javascript">
var data = JSON.parse( '<?php echo json_encode($rows); ?> ' );
</script>
这很好用,除非该消息具有特殊字符,例如撇号,例如“戴夫的狗的骨头”。这会产生错误
这种使用PHP和javascript的应用程序的最佳实践是什么?我想我需要某种方式来编码特殊字符,然后javascript可以解码并显示这些特殊字符。
错误如下: 参数列表后未捕获到的SyntaxError:缺少
<script type="text/javascript">
var data = JSON.parse( '[{"NAME":"The Kennel","LATITUDE":"50.7599143982","LONGITUDE":"-1.3100980520","MESSAGE","Dave's Dog's Bone"}] ' );
</script>
非常感谢
答案 0 :(得分:4)
问题是您的JSON.parse()
,在这种情况下根本不需要。
更改:
var data = JSON.parse( '<?php echo json_encode($rows); ?> ' );
到
var data = <?= json_encode($rows); ?>;
JSON.parse()
用于解析字符串化的json。从json_encode()
回显结果将立即为您提供正确的结果。
旁注
如果查询未返回任何结果,我建议您在$rows = [];
或if (mysqli_num_rows($result) > 0)
之前添加json_encode($rows)
,然后抛出“未定义的变量”(因为该变量当前是在在循环浏览结果时循环播放。)
旁注2
进行数据库查询时,建议使用参数化的Prepared Statements而不是mysqli_real_escape_string()
来手动转义和构建查询。当前,建议使用预备语句来保护自己免受SQL注入的侵扰,并确保您不会忘记或错过以逃避某些价值。
答案 1 :(得分:0)
您可以通过在json中添加'自己产生该错误。如果您要检查使用此:
JSON.parse( '[{"NAME":"The Kennel","LATITUDE":"50.7599143982","LONGDITUTE":"-1.3100980520","type":"bad","reason":"Dave\'s Dog\'s Bone","improvement":"","reviewed":"0"}] ' );
如果要更正主代码中的var数据,请先将str.replace(/'/g, '"')
解析为json。