Ajax返回200成功,却进入error函数的解决方法

Js+JQuery helloweb 次浏览 已收录 评论() 扫描二维码
扫描二维码

最近碰到一个问题,就是如题目所说,Ajax 在调用的时候,明明返回成功了,但 js 代码却走到了 error 中,最后发现是我返回的 json 格式不对,jQuery 在1.4后,对 ajax 返回的 json 格式有了很强的限制,所以一定要用严格的 JSON 格式返回。

先上代码:

jQuery.ajax({
    type: "POST",
    async: true,
    dataType: "json",
    url:'',
    data: {venderIds: venderIds, random: Math.random()},
    success: function (result) {
        console.log("zslog 13.2 异步调用返回成功,result:"+result);
    },
    error: function (XMLHttpResponse, textStatus, errorThrown) {
        console.log("1 异步调用返回失败,XMLHttpResponse.readyState:"+XMLHttpResponse.readyState);
        console.log("2 异步调用返回失败,XMLHttpResponse.status:"+XMLHttpResponse.status);
        console.log("3 异步调用返回失败,textStatus:"+textStatus);
        console.log("4 异步调用返回失败,errorThrown:"+errorThrown);
    }
});

对的,我打出这么多日志后,再变态的错误也就迎刃而解了,这个也适用于大家找错误,这样找肯定能找到是哪的问题,不至于一头雾水

最终控制台打出来的错误是 parsererror,那就是 json 解析出错了,而且还能打印出来具体的出错位置

这是我的 response:{“couponNums”:{611662:1},”couponSets”:null,”msg”:null,”success”:true}

发现了没,611662 不是字符串类型,也就是这里,就是所谓的不严格的JSON格式,导致 ajax 跳到了 error 函数。

总结: 

遇到问题不要怕,顺着方向慢慢找,实在不行打日志,最后百度和谷歌

状态码对比

最后附带一个 error 函数的三个参数的有关状态码对比,供对照着查询找错:

参数 XMLHttpRequest.readyState: 状态码 

0 - (未初始化)还没有调用 send() 方法;

1 - (载入)已调用 send() 方法,正在发送请求;

2 - (载入完成)send()方法执行完成,已经接收到全部响应内容; 

3 - (交互)正在解析响应内容;

4 - (完成)响应内容解析完成,可以在客户端调用了;

第一个参数 XMLHttpRequest.status : 

0XX:状态未初始化 

1xx - 信息提示 

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。

100 - 继续。 

101 - 切换协议。 

2xx - 成功 

这类状态代码表明服务器成功地接受了客户端请求。 

200-确定。客户端请求已成功。 

201-已创建。 

202-已接受。 

203-非权威性信息。 

204-无内容。 

205-重置内容。 

206-部分内容。 

3xx-重定向 

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。 

301-对象已永久移走,即永久重定向。 

302-对象已临时移动。 

304-未修改。 

307-临时重定向。 

4xx-客户端错误 

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。 

401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示: 

401.1-登录失败。 

401.2-服务器配置导致登录失败。 

401.3-由于ACL对资源的限制而未获得授权。 

401.4-筛选器授权失败。 

401.5-ISAPI/CGI应用程序授权失败。 

401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。 

403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因: 

403.1-执行访问被禁止。 

403.2-读访问被禁止。 

403.3-写访问被禁止。 

403.4-要求SSL。 

403.5-要求SSL128。 

403.6-IP地址被拒绝。 

403.7-要求客户端证书。 

403.8-站点访问被拒绝。 

403.9-用户数过多。 

403.10-配置无效。 

403.11-密码更改。 

403.12-拒绝访问映射表。 

403.13-客户端证书被吊销。 

403.14-拒绝目录列表。 

403.15-超出客户端访问许可。 

403.16-客户端证书不受信任或无效。 

403.17-客户端证书已过期或尚未生效。 

403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。 

403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。 

403.20-Passport登录失败。这个错误代码为IIS6.0所专用。 

404-未找到。 

404.0-(无)–没有找到文件或目录。 

404.1-无法在所请求的端口上访问Web站点。 

404.2-Web服务扩展锁定策略阻止本请求。 

404.3-MIME映射策略阻止本请求。 

405-用来访问本页面的HTTP谓词不被允许(方法不被允许) 

406-客户端浏览器不接受所请求页面的MIME类型。 

407-要求进行代理身份验证。 

412-前提条件失败。 

413–请求实体太大。 

414-请求URI太长。 

415–不支持的媒体类型。 

416–所请求的范围无法满足。 

417–执行失败。 

423–锁定的错误。 

5xx-服务器错误 

服务器由于遇到错误而不能完成该请求。 

500-内部服务器错误。 

500.12-应用程序正忙于在Web服务器上重新启动。 

500.13-Web服务器太忙。 

500.15-不允许直接请求Global.asa。 

500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。 

500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。 

500.100-内部ASP错误。 

501-页眉值指定了未实现的配置。 

502-Web服务器用作网关或代理服务器时收到了无效响应。 

502.1-CGI应用程序超时。 

502.2-CGI应用程序出错。application. 

503-服务不可用。这个错误代码为IIS6.0所专用。 

504-网关超时。 

505-HTTP版本不受支持。 

FTP 

1xx-肯定的初步答复 

这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 

110重新启动标记答复。 

120服务已就绪,在nnn分钟后开始。 

125数据连接已打开,正在开始传输。 

150文件状态正常,准备打开数据连接。 

2xx-肯定的完成答复 

一项操作已经成功完成。客户端可以执行新命令。200命令确定。 

202未执行命令,站点上的命令过多。 

211系统状态,或系统帮助答复。 

212目录状态。 

213文件状态。 

214帮助消息。 

215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 

220服务就绪,可以执行新用户的请求。 

221服务关闭控制连接。如果适当,请注销。 

225数据连接打开,没有进行中的传输。 

226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。 

227进入被动模式(h1,h2,h3,h4,p1,p2)。 

230用户已登录,继续进行。 

250请求的文件操作正确,已完成。 

257已创建“PATHNAME”。 

3xx-肯定的中间答复 

该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331用户名正确,需要密码。 

332需要登录帐户。 

350请求的文件操作正在等待进一步的信息。 

4xx-瞬态否定的完成答复 

该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。 

425无法打开数据连接。 

426Connectionclosed;transferaborted. 

450未执行请求的文件操作。文件不可用(例如,文件繁忙)。 

451请求的操作异常终止:正在处理本地错误。 

452未执行请求的操作。系统存储空间不够。 

5xx-永久性否定的完成答复 

该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 

501在参数中有语法错误。 

502未执行命令。 

503错误的命令序列。 

504未执行该参数的命令。 

530未登录。 

532存储文件需要帐户。 

550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 

551请求的操作异常终止:未知的页面类型。 

552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。 

553未执行请求的操作。不允许的文件名。 

常见的FTP状态代码及其原因 

150-FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。 

226-命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。 

230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。 

331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。 

426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。 

530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。 

550-命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。

第二个参数 textStatus: 字符串类型的返回状态 

“timeout”(超时), “error”(错误), “abort”(中止), “parsererror”(解析错误),还有可能返回空值。

第三个参数 errorThrown: 返回的错误信息 

表示服务器抛出返回的错误信息,如果产生的是 HTTP 错误,那么返回的信息就是 HTTP 状态码对应的错误信息,比如 404 的 Not Found,500 错误的 Internal Server Error。


作者:zhangSir134 

原文链接:HelloWeb前端网 » Ajax返回200成功,却进入error函数的解决方法 » 感谢您的浏览,希望能有所帮助。

欢迎您加入“Helloweb” 学习交流群:HelloWeb-学习交流群 196291215 共同交流并结识同行,在这里说出您的收获与感想或有什么不同的观点,我们期待您的留言,分享,让我们一起进步!

喜欢 ()or分享