echo json_encode仅在浏览器中显示数据,而jquery无法获取数据(PHP MVC)

时间:2018-07-25 13:42:39

标签: php jquery

我建立了自己的PHP MVC网站。我希望管理员可以使用jQuery和getJSON函数无需刷新即可查看数据

管理员控制器中的索引方法

public function index(){
    session_start();
    if($this->isLogin()){
        echo json_encode($this->adminModel->getAdsWithNoPermission());

    }else{
        die("404 NOT FOUND");
    }

}

管理员控制器中的主页方法

public function home(){
    session_start();
    if($this->isLogin()){
        $this->view('admin/index');
    }else{
        redirect('pages/notfound');
    }
}

管理员/索引视图中的Jquery脚本

function adsOutput(){
    $.getJSON('<?php echo URL_ROOT;?>admins/index',function(data){
        var adminid = '<?php echo $_SESSION['admin_id'];?>';
        $.each(data,function(i,item){
            $('#adsOutput').append('<tr>');
            $('#adsOutput').append('<th score="row">' + i);
            $('#adsOutput').append('<td>' + data[i].title + '</td>');
            $('#adsOutput').append('<td>' + data[i].subject + '</td>');
            $('#adsOutput').append('<td>' + data[i].description + '</td>');
            $("#adsOutput").append('<td><input type="submit" class="publish btn btn-success" value="publish" adid=' + data[i].id +  ' adminid=' +adminid +' ><input type="submit" class="delete btn btn-danger" value="delete" adid=' + data[i].id +  ' adminid=' +adminid +' ></td>' );

            console.log(data);

        })
    })
}

如您所见,我写了2个方法home和index。索引只是以json方式回显来自模型的数据。然后主页返回主页视图。在jQuery函数中,我从索引页面获取json文件,并在html中显示数据。 代码可以正常工作,但是我想知道如何只有一种这样的索引方法

public function index(){
session_start();
if($this->isLogin()){
    echo json_encode($this->adminModel->getAdsWithNoPermission());
    $this->view('admins/index');
}else{
    die("404 NOT FOUND");
}

}

因为当我这样编写索引并删除home方法时,输出为:https://pasteboard.co/Hw62NKh.jpg

并且如果没有办法我可以处理索引方法中的所有事情,并且home方法必须存在,那么我如何隐藏索引方法(避免通过URL到达admin),仅将其用于jquery。 / p>

1 个答案:

答案 0 :(得分:0)

您不能像这样合并两个请求。索引函数应该只返回一件事,即页面。也许您可以在视图方法中添加一个“参数”参数,例如

$this->view('admins/index',$this->adminModel->getAdsWithNoPermission());

然后在您的视图中,将数据回显到JS对象或HTML中。

请注意,输出JSON数据时应设置内容类型。例如

header('Content-Type: application/json');