我是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没有效果)
答案 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