今天在thinkphp中(5.0.7),前端进行ajax post上传数据,在控制器代码中,通过ajaxreturn()返回json数据,返回数据后,继续在控制器代码中,对post过来的数据进行decode解码等操作,或者进行file_put_contents()文件写入操作,发现,在控制器代码中,写在ajaxreturn()后面的所有代码都不会执行了。
调整了代码的顺序,我将ajaxreturn()放到了其他代码的后面,控制器执行则正常。
这说明,控制器在对ajax进行ajaxreturn()操作以后,就不会对ajax post过来的数据再进行任何的处理操作了。
若控制器需要对前端ajax post过来的数据多次进行复合操作,那么,一定要将这些对数据进行操作的代码写在ajaxreturn()函数的前面。
代码示例:
前端代码:
以下代码非完整代码,仅用于做示例说明,前端通过ajax post了一个json数据给thinkphp的控制器,并且通过
$('#creatcode').html("base64数据内容是:"+data);
这个success内的函数操作,在前端页面中显示post数据的内容。
$.ajax({
url: "",
dataType: "json",
type: "POST",
data: {img:ajaxdata},
success: function (data) {
alert('上传成功');
//console.log(data);
$('#creatcode').html("base64数据内容是:"+data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
alert('上传失败'+errorThrown);
},
complete: function(xhr, stat) {}
});
});
});
在控制器中,对前端ajax post过来的数据进行处理,以下代码注意,我已经将 this−>ajaxReturn( t h i s − > a j a x R e t u r n ( img_data); 这个代码放入了数据处理代码的后面,那么数据处理正常执行。
if(IS_POST){
$img_data= $_POST['img'];
$userLogic->base64_to_file($img_data,'livecover');
//$file_put = file_put_contents("public/upload/images/live_cover/112.txt", "4q");
$this->ajaxReturn($img_data);
echo json_encode(array('code'=>1));
}
错误代码示例:
if(IS_POST){
$img_data= $_POST['img'];
$this->ajaxReturn($img_data);
$userLogic->base64_to_file($img_data,'livecover');
//$file_put = file_put_contents("public/upload/images/live_cover/112.txt", "4q");
echo json_encode(array('code'=>1));
}
在这个代码中,我将 this−