A-A+

thinkphp框架ajax返回问题

2015年09月13日 ThinkPHP 暂无评论 阅读 1,474 views 次

前天发布了自己写的博客系统YBlog的第一个版本,后台在上传图片的时候并没有使用Ajax请求,在更新下一个版本的时候打算使用上传ajax请求,但是thinkphp框架自带的ajaxReturn方法返回的并不是我所需要的json对象,看下图:

thinkphp

视图中的代码是这样的:

$("#upload").ajaxfileupload({
'action': '__CONTROLLER__/uploadAjax',
'params': {
'extra': 'info'
},
'onComplete': function(data) {
alert(data);
if (data.success == 1) {
                $('#uploadPath').val(data.path);
                $('#showPic').attr('src', data.url).show();
            } else {
        
            }
$("#loading").hide();
},
'onStart': function() {
$("#loading").show();
$("#showPic").hide();
},
'onCancel': function() {
}
});

于是各种不解,查看了tp框架的ajaxReturn方法源码,终于找到了原因。


protected function ajaxReturn($data,$type='',$json_option=0) {
if(empty($type)) $type  =   C('DEFAULT_AJAX_RETURN');
switch (strtoupper($type)){
case 'JSON' :
// 返回JSON数据格式到客户端 包含状态信息
header('Content-Type:application/json; charset=utf-8');
exit(json_encode($data,$json_option));
case 'XML'  :
// 返回xml格式数据
header('Content-Type:text/xml; charset=utf-8');
exit(xml_encode($data));
case 'JSONP':
// 返回JSON数据格式到客户端 包含状态信息
header('Content-Type:application/json; charset=utf-8');
$handler  =   isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
exit($handler.'('.json_encode($data,$json_option).');');
case 'EVAL' :
// 返回可执行的js脚本
header('Content-Type:text/html; charset=utf-8');
exit($data);
default     :
// 用于扩展其他返回格式数据
Hook::listen('ajax_return',$data);
}
}

是由于这一句造成的: header('Content-Type:application/json; charset=utf-8');

于是我把这句改为:header('Content-Type:text/html; charset=utf-8');

终于把问题解决了。

如下图返回就是正确的

2

 

给我留言

Copyright © 严佳冬 保留所有权利.   Theme  Ality 百度地图 苏ICP备15015381号-1

用户登录

分享到: