【问题标题】:Unable to access JSON fields in a AJAX call无法访问 AJAX 调用中的 JSON 字段
【发布时间】:2012-05-21 17:22:58
【问题描述】:

我是 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, 数据类型:'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 没有效果)

【问题讨论】:

  • console.log(data) 和 console.log($("id_test").empty()) 给你什么?
  • 在成功方法中尝试调试console.log(data)等数据,如果显示任何结果请告诉我
  • 我现在在家。我会尽快尝试两者!谢谢!
  • 也许您的代码中只是一个错字? view_data['test'] = 'ajax'; $view_data 缺少 $ 符号
  • 几乎可以肯定这是一个剪切/粘贴错字..但我明天早上会仔细检查:)

标签: php jquery ajax json codeigniter


【解决方案1】:

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

【讨论】:

  • 我同意 - 语法和正确的大小写对于 javascript 非常重要。
  • 我知道 dataType,我也尝试过,但是对于 dataType,我既没有 Array{"test":"ajax"} 输出。也许还有另一个隐藏的问题..?
  • 使用 datatype 它将返回 Array{"test":"ajax"},使用 dataType 它不会返回任何内容,但添加错误函数将在错误函数中显示警报(msg)。这对我来说似乎有点奇怪:)
  • 我发现了错误。我在模型中回显一些值以进行调试,回显的结果是 Array{"test":"ajax"} 的 Array 部分加上初始
【解决方案2】:

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

【讨论】:

  • jsonp 用于跨域请求。
【解决方案3】:

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

【讨论】:

  • data.d ?你为什么会这样想?
  • 对不起,来自asp.net背景。请忽略data.d
  • 错误处理程序是什么意思?一个错误:函数()?抱歉,我是网络编程新手:)
  • yeb,就像你有 error: function(msg){aler(msg);} 来显示错误消息,如果 ajax 有一个。
  • 我收到一条错误消息,但除了将 feom(不正确)数据类型:'json' 切换为(正确)数据类型:'json' :(
【解决方案4】:

只是猜测,但...可能有语法错误?

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

    echo json_encode( $view_data ); 
}

【讨论】:

  • 几乎可以肯定这是一个剪切/粘贴错字..但我明天早上会仔细检查:)
  • 您还需要使用 for 循环遍历数据对象
  • 这是一个剪切/粘贴错字!你打算迭代 javascript 数据数组吗?在哪种模式下?
【解决方案5】:

如果我对您的理解正确,为了将您的 &lt;div id="id_test"&gt; &lt;p&gt;&lt;?php echo $test ?&gt; &lt;/p&gt;&lt;/div&gt; 替换为来自 $.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"},您可以通过data.test这种方式访问​​返回的JavaScript对象

【讨论】:

  • 试试这个,$('#id_test').empty().html(data.test);
  • "我的预期行为是使用 $("#id_test").empty().append(data.test); AJAX 输出将只是单词 ajax"
猜你喜欢
  • 2021-03-04
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多