于是打开超级简陋的 IE 调试工具,使用“网络”->“开始捕获”的工具抓取 ajax 请求头,得到 200 的响应头,但是在 jquery 的 ajax 中却是由 error 处理的,200 的结果怎么会跑到 error 去处理呢?

于是,在 error 中加入各种调试输出:

1
2
3
4
5
6
7
8
error: function(XMLHttpRequest, textStatus, errorThrown) {
    console.log(XMLHttpRequest);
    console.log('readyState: ' + XMLHttpRequest.readyState);
    console.log('status: ' + XMLHttpRequest.status);
    console.log(textStatus);
    console.log(errorThrown);
    alert('未提交成功!');
},

结果如下:

1
2
3
4
5
日志: [object Object]
日志: readyState: 0
日志: status: 0
日志: error
日志: Error: 由于出现错误 c00ce56e 而导致此项操作无法完成。

于是搜索“由于出现错误 c00ce56e 而导致此项操作无法完成。”。

原来是返回的编码与客户端编码不一致,我确定我的浏览器一直是在 uft-8 编码下的,而服务器返回的数据也加了编码设置。

于是再次查看我是不是漏掉那一条小横杠了,结果是多了一个空格:

1
header('Content-Type: text/plain; charset= utf-8');

改成:

1
header("content-type:text/plain; charset=UTF-8");

就正常了。