【问题标题】:Calling a control method in an Ajax call and error for converting array to string在 Ajax 调用中调用控制方法以及将数组转换为字符串时出错
【发布时间】:2013-10-24 21:17:08
【问题描述】:

我正在尝试调用我的控制器方法,该方法在 Ajax 调用中调用模型方法。

这是我的 Ajax 调用:

        $.ajax({
                    type: "POST",
                    async: false,
                                            dataType: "json",
                    url: "<?php echo base_url('siteController/fetchEmployees') ?>",
                    success: function(data) 
                    {
                        html = "<table id='myTable'><thead><tr id='test'><th>ID</th><th>FName</th><th> LName</th></tr></thead><tbody id='contentTable'>";
                        for (var i = 0; i < data.length; i++)
                        {
                            html = html + "<tr  id='trResponses' ><td><div >" + data[i]['ID'] + "</div></td><td><div >" + data[i]['FName'] + "</div></td><td><div >" + data[i]['LName'] + "</div></td></tr>";                        
                        }
                         html = html + "</tbody></table>";
                         $("#resultFrm2").html(html);
                    },
                    error: function() {
                        alert('error');
                    }                
                });

我的 siteController 有以下方法:

 public function fetchEmployees() 
 {
    $this->load->model('user_model');
    return json_encode($this->user_model->getAll());
}

我的模型方法如下:

public function getAll() 
{
    $q = $this->db->get('users');        
    if ($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}

但由于我在控制器中的返回是一个数组,我收到以下错误:

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

你知道我该如何处理这个问题吗?

如果我的问题不清楚,请告诉我您需要进一步澄清哪一部分?

添加: 我做了你所有的建议,并在这里提到了我所有的变化!但是现在没有 Ajax 的输出但是如果在我的控制器中而不是 return json_encode($this->user_model->getAll());我使用 var_dump( json_encode($this->user_model->getAll()));我可以看到响应数据! 谢谢

【问题讨论】:

  • 你需要echo回复,不要使用return:echo json_encode(...)
  • 是的,请将其放入新消息中,以便我接受它作为答案
  • 非常感谢 :)
  • 只是为了确保我理解我们为什么使用 json_encode:因为我的输出是一个数组,我们需要使用 json_encode,并且在 ajax 调用中,当数据类型为“Json”时,它会解码为一个数组!但是,如果我的输出只是像 count() 这样的单个元素,那么在这种情况下,我不需要使用数据类型:“json”和 json_encode,对吗?在控制器中使用 echo 也是一个好习惯吗?

标签: php ajax codeigniter


【解决方案1】:

已编辑:

需要返回一个json数组

在你的 ajax 调用集中

dataType: "json" 

在你的 fetchEmployees() 函数中

echo json_encode($this->user_model->getAll());

这会将 php 数组作为字符串传输,当您的 ajax 函数接收到该字符串时,该字符串将转换为 javascript 数组。

【讨论】:

  • 请多指教好吗?在模型或控制器中?然后在视图中它应该被解码?
  • 在您的 ajax 调用集 dataType: "json" 和 fetchEmployees() 函数中“return json_encode($this->user_model->getAll());”。这会将 php 数组作为字符串传输,当您的 ajax 函数接收到该字符串时,该字符串将转换为 javascript 数组。
  • 非常感谢!我做到了,但现在 ajax 不再返回任何东西了!:( 但是,如果在返回我的控制器之前( return json_encode($this->user_model->getAll());) 如果我提到 =>var_dump( json_encode($this-> user_model->getAll())); 在 Firebug 的 ajax 响应中我可以看到数据!
  • 您需要来自控制器的echo,而不是return。必须输出数据,这就是 var_dump 起作用的原因(它发送输出)
  • 伙计,你太棒了,输入一条新消息,我需要接受它作为答案!请
【解决方案2】:

您的 siteController 有问题 - echo 接受并返回一个字符串,而您正在向它传递一个数组。你想把echo($this-&gt;user_model-&gt;getAll());改成return json_encode($this-&gt;user_model-&gt;getAll());

AJAX 响应采用 JSON(JavaScript 对象表示法)的形式,如果您不先json_encode,则会收到 JavaScript ParseError。

【讨论】:

  • 哎呀,错过了。加文是对的,上面。你必须json_encode你的数据。我已经编辑了我的答案。
  • 现在我在我想在我的控制器方法中返回时进行了编码,但现在我的 Ajax 不再返回任何东西了!我需要在 View 中对其进行解码吗?你能告诉我怎么做吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2013-05-31
  • 2014-03-28
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多