关于微信内ajax请求出现readyState为0的问题

这两天开发某公众号项目遇到一个问题,部分手机测试ajax上传图片的时候出现以下错误提示:

1
{"readyState":0,"status":0,"status Text":"NetworkError:Failed to execute 'send' on 'XMLHttpRequest': Failed to load..."}

这个是请求还没发出去的报错,就排除了服务端的原因。js方面也没有找到什么不兼容的代码,但是部分机型还是出现非常小的图片可以上传,但是稍微大点的就挂掉了。折腾了半天终于发现了一个大坑,在微信内使用ajax请求的时候,async参数要写成true才可以,示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$.ajax({
url: '',
type: 'POST',
data: formData,
// 告诉jQuery不要去处理发送的数据
processData: false,
// 告诉jQuery不要去设置Content-Type请求头
contentType: false,
async: true, //大坑就在这里,不能设置为fasle
dataType: 'json',
beforeSend: function() {
console.log("正在进行,请稍候");
var loadT = layer.msg('正在上传,请稍候…', {
icon: 16,
time: 0,
shade: [0.3, '#000']
});
},
success: function(result) {
console.log(result);
},
error: function(responseStr) {
alert(JSON.stringify(responseStr));
console.log(responseStr);
},
complete: function(result) {
layer.closeAll();
}
});