【问题标题】:Ajax Issue in CI. Getting data but JQuery shows errorCI 中的 Ajax 问题。获取数据但 JQuery 显示错误
【发布时间】:2018-05-24 16:58:37
【问题描述】:

我有以下代码

<?php
$arr=array();
$arr=$this->session->ques;
if(isset($this->session->username))
{
 echo '<div id="instruction">
      Welcome to Exam
     </div>';
 echo '<div id="questdiv">
       Start Now
     </div>';   
}
?>
$(document).ready(function(){
$("#questdiv").click(function()
{
    $("#instruction").hide();
    $.ajax({
      type:"post",
      url:"<?php echo base_url();?>"+"candidate/nextques",
      dataType:"json",
      data:{val: <?php echo json_encode($arr);?>},
      success:function(res){
      if(res)
      {
       $("#questdiv").append('<span>'+res[0]['question']);
       $("#questdiv").append('<span>'+res[0]['option1']);
       $("#questdiv").append('<span>'+res[0]['column2']);
       $("#questdiv").append('<span>'+res[0]['column3']);
       $("#questdiv").append('<span>'+res[0]['column4']);
      }
    },
    error: function(res,status,error) {
        var err = res.responseText;
      alert(res.Message);
      alert(status);
      alert(error);
    }
    }); 
  });   
});
</script>

在这段代码中,我有两个 div。我希望在单击 div questdiv 时,应该触发 AJAX,从控制器模型中获取值并在 div 中附加一些子项。

虽然数据是从数据库中获取的(如网络调试所示),但预览也显示了上述两个div,因此我收到JSON解析错误。

[{"sno":"1","examcode":"PHP-101","question":"What is PHP?","image":"1-1.jpg","option1":"scripting language","image1":"1-2.jpg","option2":"programming language","image2":"1-3.jpg","option3":"both","image3":"1-4.jpg","option4":"none","image4":"1-5.jpg","correctans":"d58abf157fec3d16bf921e97966c9e57"}]
Welcome to Exam
Start Now

我无法弄清楚为什么我从控制器收到解析错误,我只获得有效的 JSON 数据?

如果欢迎参加考试开始考试都在制造问题,那么如何解决呢?

【问题讨论】:

  • 如果您希望它是 json,请不要在响应中返回 Welcome to ExamStart Now
  • 基本上,您将 ajax 发布请求发送到生成 json 和 div 的同一页面。我建议您创建一个单独的 php 文件,仅包含用于生成没有任何 html 的 json 数据的代码,然后更新您的 jquery ajax 帖子以指向新的 url。
  • @Taplar 这两个东西我没退
  • @MohsinMehmood 这是 CodeIgniter。我了解您在核心 PHP 中的解决方案,但是如何在 CI 中完成?一切都只能在控制器上运行。
  • 如果你没有返回这些字符串,那么你在最后一个代码 sn-p 中向我们展示了什么,你有 json 后跟这两个字符串?

标签: javascript php jquery json codeigniter


【解决方案1】:

您应该有单独的控制器方法,一种使用 div 呈现页面,另一种仅返回您的 json 对象。他们这样做的方式,你不会有一个有效的 json 对象,因为 div 也在其中呈现(因为它本质上是在 ajax 调用上重新呈现页面)。

例子:

class Some_controller {

    public function index() {
        $this->load->view('someview');
    }

    public function json() {
        $array = array('123', '456');
        echo json_encode($array);
    }

}

一些观点:

<script>
    $(document).ready(function () {
        $('#doAction').on('click', function (e) {
            e.preventDefault();
            $.ajax({
                type: "get",
                url: "<?php echo base_url(); ?>some_controller/json",
                dataType: "json",
                success: function (res) {
                    console.log(res);
                }
            });
        });
    });
</script>
<div><a id="doAction" href="javascript:void()">Some div</a></div>

【讨论】:

  • 嗨。感谢您的响应,这似乎很有意义,但是如何从两个控制器中打开一个视图?如果我有一个生成 JSON 的控制器,那么从哪里调用第二个控制器?
  • 希望我的示例可以为您解决问题。第二个控制器 method 仅用于返回 json,因此只能由 ajax 请求访问。
  • 哦!!!我检查了。我有不同的控制器,但错误是加载视图代码行也是用 json 返回控制器编写的。愚蠢的错误。非常感谢您的支持。
  • 很高兴你把它整理好了!
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 2018-05-28
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多