ajax post上传后莫名其妙的首次上传出错,再次上传正确
最近做一个项目,局域网本机(192.168.1.168),及手机测试局域网ajax post上传正确。
前端
$.ajax({
url: "userpost_ajax.php",
type: 'post',
data: formData,
dataType : 'json', //传递数据的格式
async:false, //这是重要的一步,防止重复提交的
cache: false, //设置为false,上传文件不需要缓存。
contentType: false,//设置为false,因为是构造的FormData对象,所以这里设置为false。
processData: false,//设置为false,因为data值是FormData对象,不需要对数据做处理。
success: function (redata) {
rtime=redata.retime;
rtoken=redata.retoken;
if(redata.success==true){
$.alert("上传成功", function() { //$.alert为jquery-weui插件
$("#imgshow_"+val).attr("src",redata.file_name);
});
}else if(redata.success==false){
$.alert("上传出现错误,错误提示:"+redata.message);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
Alert(XMLHttpRequest);alert(textStatus);alert(errorThrown);
}
});
结果部署到云服务器上出错,输出错误为 200 4 parsererror,查看返回数据符合JSON格式。弄不明白哪里的问题,后来仔细检查后台PHP代码
$picstr=$GLOBALS['conn']->………………//取出PIC图地址字符串
$picarr = explode(',',$picstr);
if(!empty($picarr[$pickey])){
$file_name_old=$picarr[$pickey];//若索引存在文件名,则赋值
}
if(file_exists(SYSROOT.$file_name_old)) //成功写入后清理旧文件已包含路径
{
unlink(SYSROOT.$file_name_old);
}
因为是首次上传出错,以后在上传正确,考虑的是数据库中首次没有原文件的缘故。于是先是加@unlink(SYSROOT. f i l e n a m e o l d ) ; 屏 蔽 报 错 , a j a x 问 题 解 决 。 但 再 仔 细 检 查 了 一 遍 。 原 来 根 本 原 因 是 粗 心 大 意 , file_name_old); 屏蔽报错,ajax问题解决。但再仔细检查了一遍。原来根本原因是粗心大意, filenameold);屏蔽报错,ajax问题解决。但再仔细检查了一遍。原来根本原因是粗心大意,file_name_old未作初始化,如果数据库没此地址,则$file_name_old变量不存在。PHP程序可以继续运行下去,但AJAX返回的有错误空头。