thinkphp框架ajax返回问题
前天发布了自己写的博客系统YBlog的第一个版本,后台在上传图片的时候并没有使用Ajax请求,在更新下一个版本的时候打算使用上传ajax请求,但是thinkphp框架自带的ajaxReturn方法返回的并不是我所需要的json对象,看下图:
视图中的代码是这样的:
$("#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');
终于把问题解决了。
如下图返回就是正确的