Php 无法在AJAX调用中访问JSON字段

Php 无法在AJAX调用中访问JSON字段,php,jquery,ajax,json,codeigniter,Php,Jquery,Ajax,Json,Codeigniter,我是Php/Jquery编程新手,这一整天我都在想如何通过Jquery AJAX调用访问JSON字段: 我正在使用codeinniter,在我的控制器中,相关代码是: if( $this->input->is_ajax_request()) { $view_data['test'] = 'ajax'; echo json_encode( $view_data ); } else { $view_data['test'] = 'not ajax';

我是Php/Jquery编程新手,这一整天我都在想如何通过Jquery AJAX调用访问JSON字段:

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

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>
))`

这样,AJAX输出是
Array{“test”:“AJAX”}


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

经过一点调试,我得出结论,这是一个纯文本/假JSON问题。
它只返回数组的文本表示,而不是json数组。现在,我如何从控制器发送正确的json数组?(我已经将mimetype强制为application/json,但没有效果)

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

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

尝试在ajax调用中添加错误处理程序,以便判断它是否成功执行。我认为你必须使用数据.d只是一个猜测,但是。。。可能是语法错误

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

    echo json_encode( $view_data ); 
}

如果我理解正确,为了将您的
替换为
$.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

console.log(data)给您什么,以及console.log($((“id_test”).empty())?在成功方法中,尝试调试像console.log(data)这样的数据,如果有结果,请告诉我我现在在家。只要我能,我将尝试两者!非常感谢。也许你的代码中有一个输入错误?表示view_data['test']='ajax'的行;$view\u数据缺少$sign几乎可以肯定这是剪切/粘贴错误。但我明天早上会再次检查:)
data.d
?你为什么这么想?对不起,我是asp.net背景的。请忽略数据。对于错误处理程序,您指的是什么?错误:函数()?抱歉,我是web编程新手:)是的,就像成功一样,您有错误:函数(msg){aler(msg);}如果ajax有错误消息,则显示错误消息。我有一条错误消息,但除了将feom(不正确)数据类型:“json”切换为(正确)数据类型:“json”:(
jsonp
用于跨域请求。我同意-语法和正确的大小写对于javascript非常重要。我知道数据类型,我也尝试过这一点,但对于数据类型,我既没有数组{“test”:“ajax”}输出。可能还有另一个隐藏的问题吗?对于数据类型,它将返回数组{“test”:“ajax”},使用数据类型,它将不返回任何内容,但添加一个错误函数将在错误函数中显示警报(msg)。对我来说,这似乎有点奇怪:)我发现了错误。我在模型中回显了一些用于调试pourposes的值,回显的结果是数组{“test”:“ajax”}加上在首字母之前剩下的几个空白几乎可以肯定这是一个剪切/粘贴错误..但我明天早上会再次检查:)您还需要使用for循环迭代数据对象它是一个剪切/粘贴错误!您打算迭代javascript数据数组吗?在哪种模式下?试试这个,
$('#id_test').empty().html(data.test)“我的预期行为是使用$(“#id_test”).empty().append(data.test);AJAX输出将只是单词AJAX”
$.ajax({
  type:"POST",
  url:this_url, 
  dataType: 'json',
  data: post_data, 
  success: function(data){
    $("#id_test").empty().append(data.test);
  }
});