我正在使用一个简单的代码从php页面获取字符串,该代码已多次使用,用于从php文件获取字符串响应。这是我第一次尝试将此结果转换为json对象(或数组)。
当我在响应中使用JSON.parse时,出现以下错误。如果我作为JSON.parse()的参数传递,则我已控制台的日志文本(即从控制台复制到传递给javascript的文本)会完美地工作。
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
var result = this.responseText;
resultsObj = JSON.parse(result);
}
php代码如下:
<?php
if (!session_id()) {
@session_start();
}
header('Content-Type: text/json');
require 'controlleur/connexionDB.php';
$sql = "SELECT * FROM depart";
$result = $conn->query($sql);
$liste .= "[";
$compteur = 0;
while ($row = $result->fetch()) {
if ($compteur != 0) {
$liste .= ", ";
}
$liste .= "{ \"idDepart\" : \"$row->idDepart\", \"idCircuit\" : \"$row->idCircuit\", \"dateDebut\" : \"$row->dateDebut\", \"nbPlaces\" : \"$row->nbPlaces\", \"prix\" : \"$row->prix\", \"titrePromotion\" : \"$row->titrePromotion\", \"rabais\" : \"$row->rabais\" }";
$compteur++;
}
$liste .= "]";
$reponse = $liste;
echo $reponse;
我收到此错误: SyntaxError:JSON.parse:第1行第1列的意外字符
控制台中变量“结果”的结果如下:
'[
{ "idDepart" : "1", "idCircuit" : "5", "dateDebut" : "2019-06-02", "nbPlaces" : "30", "prix" : "4000", "titrePromotion" : "vfv", "rabais" : "10" },
{ "idDepart" : "2", "idCircuit" : "5", "dateDebut" : "2019-06-10", "nbPlaces" : "30", "prix" : "6000", "titrePromotion" : "ded", "rabais" : "4" },
{ "idDepart" : "3", "idCircuit" : "5", "dateDebut" : "2019-07-02", "nbPlaces" : "30", "prix" : "7000", "titrePromotion" : "ded", "rabais" : "6" }
]'
答案 0 :(得分:2)
您不应尝试通过操纵字符串来创建json,而应使用内部json_encode
方法。
$result = $conn->query($sql);
$response = [];
while ($row = $result->fetch()) {
$response[] = [
'idDepart' => $row->idDepart,
'idCircuit' => $row->idCircuit,
'dateDebut' => $row->dateDebut,
'nbPlaces' => $row->nbPlaces,
'prix' => $row->prix,
'titrePromotion' => $row->titrePromotion,
'rabais' => $row->rabais
];
}
echo json_encode($response);
像这样,您100%肯定拥有:
---编辑---
我看到您用法语编码,请注意特殊字符(例如éà...)。您应该到处都有UTF-8编码。
您的数据库字符集,表和字段。
$ dbHandle =新的PDO(“ mysql:host = $ dbHost; dbname = $ dbName; charset = utf-8”,$ dbUser,$ dbPass); $ dbHandle-> exec(“ SET CHARACTER SET utf8”);
答案 1 :(得分:1)
您能尝试简化php脚本吗?
<?php
if (!session_id()) {
@session_start();
}
header('Content-Type: application/json');
require 'controlleur/connexionDB.php';
$sql = "SELECT * FROM depart";
$result = $conn->query($sql);
$liste = array();
while($row = $result->fetch()){
$list[] = [
"idDepart" => $row->idDepart,
"idCircuit" => $row->idCircuit,
"dateDebut" => $row->dateDebut,
"nbPlaces" => $row->nbPlaces,
"prix" => $row->prix,
"titrePromotion" => $row->titrePromotion,
"rabais" => $row->rabais
];
}
echo json_encode($liste);
我使用json_encode()而不是手动编写字符串,我认为这样做最好避免输入错误。
答案 2 :(得分:-1)
请确保您在php脚本上正确设置了标头
<?php header('Content-Type: text/json');