无法访问 AJAX 调用中的 JSON 字段


Unable to access JSON fields in a AJAX call

我是 Php/Jquery 编程的新手,我过去一整天都在尝试弄清楚如何从 Jquery AJAX 调用访问 JSON 字段:

我正在使用编码,在我的控制器中,相关代码是:

if( $this->input->is_ajax_request()) 
{
    $view_data['test'] = 'ajax';
    echo json_encode( $view_data ); 
}
else
{
    $view_data['test'] = 'not ajax';                              
    $data = array(
            'javascripts' => array(
            'js/jquery.dataTables.js',
            'js/zona/dataTable_zone.js',
            'js/zona/gestisci_zone.js',
            'js/jquery-ui-1.8.20.custom.min.js' ,
            'js/jquery.ui.error-panel.js',  
            'js/jquery.validate.min.js' ,
            'js/localization/messages_it.js'
        ),
        'style_sheets' => array(
            'css/south-street/jquery-ui-1.8.20.custom.css' => 'screen',                 
            'css/jquery.dataTables.css' => 'screen'
        ),
        'content' => $this->load->view( 'zona/gestisci_zone', $view_data, TRUE )
    );
    $this->load->view( $this->template, $data);
} 

'在视图中,相关代码为

<div id="id_test">  <p><?php echo $test ?> </p></div>

在javascript文件中,相关的AJAX代码是

'$.ajax( { type:"POST", 网址:this_url, 数据类型:"json", 数据:post_data,
成功:函数(数据({

                                             console.log(data);
                                             console.log($("id_test").empty());
                                        $("#id_test").empty().append(data.test);
                                        },
                                        error: function(data){
                                        alert("error");

(;'

这样,AJAX 输出就Array{"test":"ajax"}

我的预期行为是使用 AJAX 输出$("#id_test").empty().append(data.test);只是单词 ajax,但它只返回一个空白的div。我尝试以多种模式访问,但我不知道如何做到这一点。也许我因为缺乏经验而错过了一些东西,或者我使用了错误的方法。有什么建议吗?:)

经过一些调试,我得出的结论是,这是一个明文/错误的JSON问题。它只返回数组的文本表示形式,而不是 JSON 数组。现在,如何从控制器发送正确的 json 数组?(我已经强制 MIMETYPE 到 application/json,没有任何效果(

这是dataType而不是datatype。我相信这就是问题所在,似乎它没有将返回的数据解析为 json 和字符串。

我认为如果您仍然不成功,您可能需要在 json 和 jsonp 之间切换。 jQuery有2个选项"json"和"jsonp">

尝试在 ajax 调用中添加错误处理程序,以便判断它是否成功执行。我认为你必须使用data.d

只是一个猜测,但是...也许是语法错误?

if( $this->input->is_ajax_request()) 
{
    view_data['test'] = 'ajax';
    // dont you mean $view_data?
    echo json_encode( $view_data ); 
}
如果我

理解正确,为了使您的<div id="id_test"> <p><?php echo $test ?> </p></div>$.ajax()中的"ajax"一词替换,请尝试以下操作:

$.ajax({
  type:"POST",
  url:this_url, 
  dataType: 'json',
  data: post_data, 
  success: function(data){
    $("#id_test").empty().append(data.test);
  }
});

既然你提到data返回Array{"test":"ajax"},你可以用这种方式访问返回的JavaScript对象data.test