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

时间:2012-05-21 17:22:59

标签: php jquery ajax json codeigniter

我是Php / Jquery编程的新手,我整天都试图想出如何从Jquery AJAX调用中访问JSON字段:

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

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,                                          dataType:'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"}

我的预期行为是使用$("#id_test").empty().append(data.test); AJAX输出将只是单词ajax,但它只返回一个空白div。 我试图在许多模式下访问,但我没有想到如何实现这一目标。 也许我错过了一些东西,因为我缺乏经验或者我使用了错误的方法。 有什么建议吗? :)

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我认为如果你还没有成功,你可能需要在json和jsonp之间切换。 jQuery有2个选项“json”和“jsonp”

答案 2 :(得分:0)

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

答案 3 :(得分:0)

只是一个猜测但是...语法错误可能?

if( $this->input->is_ajax_request()) 
{
    view_data['test'] = 'ajax';
    // dont you mean $view_data?

    echo json_encode( $view_data ); 
}

答案 4 :(得分:0)

如果我理解正确,为了让<div id="id_test"> <p><?php echo $test ?> </p></div>替换为&#34; ajax&#34;来自$.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