JSON.parse()不适用于变量类型字符串,但如果直接使用,则可处理其内容

时间:2019-05-19 17:50:04

标签: javascript php ajax

我正在使用一个简单的代码从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" }
]'

3 个答案:

答案 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%肯定拥有:

  • 如果您的输入内容无法编码,则会发生PHP错误。
  • 显示有效的json。

---编辑---

我看到您用法语编码,请注意特殊字符(例如éà...)。您应该到处都有UTF-8编码。

  • 您的php.ini
  • 您的PDO Conn
  • 您的数据库字符集,表和字段。

    $ 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');