Ajax 语法错误:JSON 输入意外结束



在使用PHP将数据发送到我的HTML页面之前,我正在以JSON格式编码一个数组,然后我回显出结果,以便我可以使用Ajax获得它。

这是这样做的控制器


if(!isset($_SESSION))
{
session_start();
}
class ProjectController
{
private $User;
private $project;
private $lists;
private $param=[];

public function load(){
$this->User=$_SESSION['User'];
$this->project=$this->User->getPrjAt($_SESSION['NomeP'])[0];
$this->lists=$this->project->loadLists();
$this->prepare();
$this->encode($this->lists);
return view('progetto',$this->param);
}
private function prepare(){
$this->param['Nome_utente']=$this->User->getName();
$this->param['Liste']=$this->lists;
$this->param['Nome_progetto']= $this->project->getName();
}
public function view($id){
$this->project=App::get('query')->selectWhereSingle('Progetti',"id_proj='{$id['proj_id']}'",'Progetto')[0];
$this->lists=$this->project->loadLists();
$this->lists= $this->order($this->lists);
$this->param['Liste']=$this->lists;
$this->param['Nome_progetto']= $this->project->getName();
$_SESSION['id_proj']=$this->project->getId();
$this->encode($this->lists);
return view('progetto',$this->param);

}
public function delete($id){
App::get('query')->delete('Progetti',"id_proj='{$id['proj_id']}'");
header('Location: /user/home');
}
public function Add(){
$data=[
'Scala'=>$_POST['priority'],
'cod_proj'=>$_SESSION['id_proj'],
'nome'=>$_POST['NomeLista']
];
if($_POST['NomeLista']==''){
$data['nome']='Untitled';
}
else
$data['nome']=$_POST['NomeLista'];
App::get('query')->insert('Liste',$data);
$this->encode($this->lists);
header("Location: /user/project/view/?proj_id={$_SESSION['id_proj']}");
}
private function order($arr){
$num=count($arr);
$support=0;
for($i=0; $i<$num;$i++){
for($j=0; $j<$num-1;$j++){
if($arr[$j]->getScala()>$arr[$j+1]->getScala()){
$support=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$support;
}
}
}
return $arr;
}

public function Share(){
$email=$_POST['usrEmail'];
$usr= App::get('query')->selectWhereSingle('Utenti',"email='{$email}'",'User')[0];
if($usr==null){
header("Location: /something-went-wrong");
}
else {
$usr_id=$usr->getId();
$proj=App::get('query')->selectWhereSingle('Progetti', "id_proj='{$_POST['proj_id']}'",'Progetto')[0];
$data = [
'cod_utente' => $usr_id,
'NomeProj' => $proj->getName()
];
App::get('query')->insert('Progetti',$data);
header("Location: /success");
}

}

public function Modify(){
$nome=$_POST['newName'];
$id=$_POST['proj_id'];
$proj=App::get('query')->selectWhereSingle('Progetti', "id_proj='{$id}'",'Progetto')[0];
App::get('query')->modify($nome,'NomeProj', 'Progetti',"id_proj='{$id}'");
header("Location: /user/home");
}
private function encode($lists){
$enc_arr=[];
for($i=0; $i<count($lists);$i++){
$enc_arr[$lists[$i]->getNome()]=$lists[$i]->loadAssoc();
}
echo json_encode($enc_arr, JSON_FORCE_OBJECT);

}
}

编码是用于对任务和列表列表进行编码的功能。

列表类如下所示


class Lista
{
private $id_lista;
private $Scala;
private $cod_proj;
private $nome;
public function __construct()
{
}
public function getNome(){
return $this->nome;
}
public function loadCompiti(){
return App::get('query')->selectWhereSingle('Tasks', "cod_lista='{$this->id_lista}'",'Compito');
}
public function loadAssoc(){
return App::get('query')->selectAssoc('Tasks', "cod_lista='{$this->id_lista}'");
}
public function getId(){
return $this->id_lista;
}
public function getScala(){
return $this->Scala;
}
} 

回显输出是这样的

"Ingredienti": {
"0": {
"id_task": "8",
"cod_lista": "8",
"Nome": "Carote",
"descr": "carote, carote, solo carote, le regalo a mio nipote diventano banconote",
"due_date": "12/11/2019"
},
"1": {
"id_task": "9",
"cod_lista": "8",
"Nome": "",
"descr": "",
"due_date": ""
}
},
"ale": {},
"mamma": {
"0": {
"id_task": "7",
"cod_lista": "9",
"Nome": "Abbracciare",
"descr": "abbracciare mamma",
"due_date": "12/03/2019"
}
},
"X factor": {}
}

我需要的是 ajax 来处理结果而不会收到此错误,我已经尝试使用 JSON.stringfy,但我遇到了同样的错误。

您可以尝试以下代码

对于 PHP

$data = json_decode($json_data);

对于 Jquery

var json = $.parseJSON(response);

var json={
	"data": {
		"0": {
			"id_task": "8",
			"cod_lista": "8",
			"Nome": "Carote",
			"descr": "carote, carote, solo carote, le regalo a mio nipote diventano banconote",
			"due_date": "12/11/2019"
		},
		"1": {
			"id_task": "9",
			"cod_lista": "8",
			"Nome": "",
			"descr": "",
			"due_date": ""
		}
	},
	"ale": {},
	"mamma": {
		"0": {
			"id_task": "7",
			"cod_lista": "9",
			"Nome": "Abbracciare",
			"descr": "abbracciare mamma",
			"due_date": "12/03/2019"
		}
	},
	"X factor": {}
}
console.log(json)

我可以看到您的 JSON 格式不正确。 因此,如果不是,那么它将在解析或字符串化时给您错误。 您可以在此处验证 JSON

我以为你的 JSON 应该是如下所示的。

{
"data": {
"0": {
"id_task": "8",
"cod_lista": "8",
"Nome": "Carote",
"descr": "carote, carote, solo carote, le regalo a mio nipote diventano banconote",
"due_date": "12/11/2019"
},
"1": {
"id_task": "9",
"cod_lista": "8",
"Nome": "",
"descr": "",
"due_date": ""
}
},
"ale": {},
"mamma": {
"0": {
"id_task": "7",
"cod_lista": "9",
"Nome": "Abbracciare",
"descr": "abbracciare mamma",
"due_date": "12/03/2019"
}
},
"X factor": {}
}

默认情况下,每当响应出现时,它都是 JSON 格式,无需将其字符串化。

原来我正在回显我来自一个类的数据。该类还回显 HTML 并加载我的项目视图。因此,在我的 JSON 格式正确后,我收到此错误:Unexpected < in JSON at position 0.这是因为在回显我的JSON之前,我正在回显HTML。

我通过将数组传递给一个将数组回显出去的专用 PHP 文件来解决此问题。

最新更新