前天发布了自己写的博客系统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');
终于把问题解决了。
如下图返回就是正确的

801

被折叠的 条评论
为什么被折叠?



