Javascript JSON.parse()不使用变量类型字符串,但如果直接使用,它可以使用其内容
我使用一个简单的代码从php页面获取一个字符串,我曾多次使用该代码从php文件获取字符串响应。这是我第一次尝试将此结果转换为json对象(或数组) 当我对响应使用JSON.parse时,我得到如下所示的错误。如果我将控制台日志中的文本作为JSON.parse()的参数传递(即,在传递给javascript时从控制台复制),那么它就可以正常工作Javascript JSON.parse()不使用变量类型字符串,但如果直接使用,它可以使用其内容,javascript,php,ajax,Javascript,Php,Ajax,我使用一个简单的代码从php页面获取一个字符串,我曾多次使用该代码从php文件获取字符串响应。这是我第一次尝试将此结果转换为json对象(或数组) 当我对响应使用JSON.parse时,我得到如下所示的错误。如果我将控制台日志中的文本作为JSON.parse()的参数传递(即,在传递给javascript时从控制台复制),那么它就可以正常工作 xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("
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;
确保在php脚本上正确设置了标题
<?php header('Content-Type: text/json');
确保在php脚本上正确设置了标题
<?php header('Content-Type: text/json');
您不应该试图通过操纵字符串来创建json,而应该使用内部的json\u 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
---编辑---
我看到您用法语编写代码,请注意特殊字符(如a…)。你应该到处都有UTF-8编码
- 您的php.ini
- 你的PDO控制器
- 您的数据库字符集、表和字段
$dbHandle=newpdo(“mysql:host=$dbHost;dbname=$dbname;charset=utf-8”,$dbUser,$dbPass);
$dbHandle->exec(“设置字符集utf8”)
您不应该试图通过操纵字符串来创建json,而应该使用内部的json\u 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
---编辑---
我看到您用法语编写代码,请注意特殊字符(如a…)。你应该到处都有UTF-8编码
- 您的php.ini
- 你的PDO控制器
- 您的数据库字符集、表和字段
$dbHandle=newpdo(“mysql:host=$dbHost;dbname=$dbname;charset=utf-8”,$dbUser,$dbPass);
$dbHandle->exec(“设置字符集utf8”)
您是否可以尝试将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);
您是否可以尝试将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);
第1行第1列的字符是什么?就这些了。您可以显示返回json的服务器端代码吗?字符是撇号吗?您可以在php中构建一个包含所有所需项的数组,然后在该数组上使用json_enocde,或者如果将它括在“[”和“]”内,则每次构建一个项目并在该数组上使用json_enocde。第1行第1列的字符是什么?这就是全部内容。您可以显示返回json的服务器端代码吗?字符是撇号吗?您可以用php构建一个包含所有所需项的数组,然后在该数组上使用json_enocde,或者如果将它括在“[”和“]”中,则每次构建一个项并在该数组上使用json_enocde。它是application/json
,如果代码(包括问题中的代码)不注意标题,则不会产生任何影响。它是application/json
,如果代码(包括问题中的代码)不注意标题,则不会产生任何影响。运行良好,谢谢你教我怎么做。你应该在每一行后面加上“,”是的,这是真的:)请检查我的编辑,这可能会对你有所帮助。谢谢你,我会把你的答案保存起来,以备将来参考。你应该在每一行后面加上“,”是的,这是真的:)请检查我的编辑,这可能会帮你很多,我会把你的答案保存下来供将来参考是的,基本上就像Yanis git回答的一样是的,基本上就像Yanis git回答的一样