前端js代码:
if ($("#file").val() == '') {
return;
}
var formData = new FormData($("#uploadForm")[0])
console.log(formData)
formData.append('photo', $('#upload')[0].files[0]);
$.ajax({
url:xyt+'upload.php?method=addImg',
type: "post",
data: formData,
cache: false,
dataType:'json',
contentType: false,
processData: false,
success: function(data){
console.log(data);
if (data.status === 3) {
localStorage.setItem('toux_img',data.url)
console.log(data.url)
} else if (data.status === 4) {
alert('上传失败网络错误,请重新上传');
} else if (data.status === 6) {
alert('上传方式错误');
} else if (data.status === 1) {
alert('格式错误')
} else if (data.status === 2) {
alert('图片过大')
}
},
error:function(response){
console.log(response);
}
});
返回值:
{"readyState":4,"responseText":"adsfasdf","status":200,"statusText":"parsererror"}
很奇怪对不对,status=200表明远端处理是成功的,问题出在前端解析上了。dataType的可设置范围如下:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
说明:
后端返回实际是做了json处理的,dataType 类型不论是修改为 json\text 还是默认不写,都无法正常返回,最终在js里面将返回的内容又转了一次json ,问题解决
补充:js中将字符串转化成json对象的常见三种方法:
var data='[{"name":"xiao","age":12},{"name":"xiao","age":12}]';
//方式一
var json1 = JSON.parse(data);
dy(":"+json1[0].name);
//方式二
var json2 = eval("(" + data+ ")");
dy(json2[0].name);
//方式三
var json3 = (new Function("return " + data))();