如何使用json_encode将对象转换为JSON,然后将此JSON作为响应发送给AJAX?
CI_Model:
<?php
class TResponse extends CI_Model
{
private $status;
private $topics;
public function __construct()
{
parent::__construct();
}
}
内部控制器:
$response = new Model\TResponse ();
$response->status = true;
echo json_encode($response);
AJAX:
$('#myform').on('submit', function (e)
{
e.preventDefault(); // prevent page reload
$.ajax ({
type : 'POST', // hide URL
url : 'My_Controller/exec', // form validation file
data : $('#myform').serialize (),
dataType: 'json',
success : function (data)
{
console.log("ok");
}
, error: function(xhr, status, error)
{
console.log(status+" "+error+" "+xhr)
}
});
问题:
当我执行该代码结果错误时。错误是&#34;错误内部服务器错误[对象对象]&#34;。如何解决我的问题?
答案 0 :(得分:1)
我不明白你为什么要使用$response = new Model\TResponse();
。它不是&#34; codeigniter方式&#34;加载模型。但我认为它必须与问题有关,因为下面的代码对我来说非常适合。
注意我已将两个类属性设为公共。私人财产不会暴露,因此不会被提及&#34;到json_encode()
。
class TResponse extends CI_Model
{
public $status = FALSE;
public $topics = ['php', 'stackoverflow', 'json'];
public function __construct()
{
parent::__construct();
}
}
在控制器中
$this->load->model('TResponse');
$this->TResponse->status = TRUE;
echo json_encode($this->TResponse);
你的javascript很好。
如果我使用这个
success: function (data) {
console.log(data);
}
这是控制台报告的内容
Object
status: true
topics: Array[3]
0: "php"
1: "stackoverflow"
2: "json"
length: 3
答案 1 :(得分:0)
控制器
$this->output->set_content_type('application/json');
$this->output->set_output(json_encode( $response ));
视图中的
$.ajax({
type: "POST",
url: "<?php echo base_url('path/to_your_controller/function')?>",
data: {some_data: val},
success: function (data) {
var options = '';
$.each(data, function (key, value) {
// read data , each element of the JSON object
});
}
});