【问题标题】:echo json_encode just shows data in browser and jquery cant get it (PHP MVC)echo json_encode 仅在浏览器中显示数据而 jquery 无法获取它(PHP MVC)
【发布时间】:2018-07-25 13:42:39
【问题描述】:

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

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

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

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

}

管理员控制器中的 Home 方法

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 到达那里)只是为了将它用于 jquery。

【问题讨论】:

  • 仅供参考,您应该拥有一个管理所有session_start() 的文件,因此您不必重复它。
  • 一种方法是使用 ajax 调用发送特定变量,通知您的脚本您只希望 json 返回。然后,您无需同时回显 json 和整个页面,而是根据称为变量的 ajax 执行其中一项操作。否则,您只需要两种完全不同的方法,所有 ajax 调用都转到一个 url,所有正常浏览都转到另一个 url。 “哪个更好”是一个固执己见的问题,所以 YMMV。

标签: php jquery


【解决方案1】:

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

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

在您看来,将数据回显到 JS 对象或 HTML 中。

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

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

【讨论】:

  • 您不需要为 json 返回设置 Content-Type。不使用 jquery。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2017-06-01
  • 2010-11-23
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
相关资源
最近更新 更多