【问题标题】:Ajax SyntaxError: Unexpected end of JSON inputAjax SyntaxError:JSON 输入意外结束
【发布时间】:2019-12-05 08:47:09
【问题描述】:

在使用 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);


}
}

Encode 是用于对任务列表和列表进行编码的函数。

列表类如下所示



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 jquery ajax


【解决方案1】:

你可以试试下面的代码

对于 PHP

    $data = json_decode($json_data);

对于 Jquery

    var json = $.parseJSON(response);

【讨论】:

  • 你第一行代码看不懂,其实是想生成json数据来解析,交给ajax。
  • $json_data = '{ "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 因子": {} }' ;
  • 例如在 php 中
【解决方案2】:

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 here

我认为您的 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 格式,无需对其进行字符串化。

【讨论】:

  • 可能就是这样。所以现在的问题是如何在 php 中以正确格式的 json 正确编码数组?
【解决方案3】:

原来我是在回显​​课堂上的数据。该类还回显 HTML 并加载我的项目视图。所以在我的 JSON 格式正确后,我收到了这个错误:Unexpected &lt; in JSON at position 0。这是因为在回显我的 JSON 之前,我正在回显 HTML。

我通过将我的数组传递给一个专门的 PHP 文件来解决这个问题,该文件回显了该数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2021-05-01
    • 2018-08-24
    • 1970-01-01
    • 2017-04-20
    • 2020-12-05
    相关资源
    最近更新 更多