标题: jQuery ajax返回parsererror错误的解决方法
作者: Demon
链接: http://demon.tw/programming/jquery-ajax-parsererror.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
在WSH中使用jQuery ajax下载图片,却返回parsererror错误,Google了一下,找到了解决方法,记录之。
在jQuery中ajax请求方法返回的时候,会去解析返回的值,企图将返回值解析为文本,例如responseXML,或者responseText。如果请求的数据为二进制数据(例如图片),jQuery就会报parsererror的错。其实这也不算是jQuery的Bug,因为XMLHTTPRequest的API原本就是为了处理纯文本形式的数据,但纯文本数据本身也是二进制的,XMLHTTPRequest是可以请求二进制数据的。
jquery.js(1.2.6)中报错的位置是在第2878行的httpData函数中:
httpData: function( xhr, type, filter ) { var ct = xhr.getResponseHeader("content-type"), xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0, data = xml ? xhr.responseXML : xhr.responseText; if ( xml && data.documentElement.tagName == "parsererror" ) throw "parsererror"; //......
可以看出,这里的xml变量不管是true还是false,data都会去获取responseXML或者responseText,也就是去解析返回的内容。很明显,如果返回的是非文本的数据,这里就会抛出parsererror的异常(注:其实也不是所有的非文本数据都会抛出异常)。修改后:
httpData: function( xhr, type, filter ) { if (type == "binary") return xhr.responseBody; var ct = xhr.getResponseHeader("content-type"), xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0, data = xml ? xhr.responseXML : xhr.responseText; if ( xml && data.documentElement.tagName == "parsererror" ) throw "parsererror"; //......
判断ajax方法中的dataType参数,如果是binary的话直接返回responseBody,看你还报错!记得在ajax请求中把dataType设置成binary哦:
$.ajax({ url: url, dataType: "binary", async: false, success: function() { //do something } });
参考链接:jQuery中ajax方法的改进
相关推荐
首先,"parsererror"是jQuery或JavaScript中的一个错误类型,通常发生在尝试解析返回的响应数据时失败。这可能由于多种原因,例如服务器返回的数据格式不符合预期,或者是JSON格式不正确。当AJAX请求的`dataType`...
本文将详细探讨`jQuery.ajax()`中遇到的`error`返回错误以及为何会一直返回`error`的情况。 首先,`jQuery.ajax()`的`async`参数默认设置为`true`,意味着请求是异步的,即在等待服务器响应的同时,浏览器可以继续...
下面是关于如何在jQuery中通过ajax的error方法调试错误的详细知识点。 ### jQuery Ajax Error方法 在jQuery中,当使用ajax方法发起异步请求时,可以通过配置选项中的`error`回调函数来处理请求失败的情况。这个...
6. **error**:请求失败时的回调函数,提供三个参数:`jqXHR`(jQuery封装的XMLHttpRequest对象)、`textStatus`(错误状态,如'timeout'、'error'、'parsererror'等)和`errorThrown`(错误信息)。 以下是一个...
首先,我们需要理解jQuery的AJAX方法。AJAX(Asynchronous JavaScript and XML)允许我们在后台与服务器通信,无需刷新整个页面。jQuery的`$.ajax()`函数封装了这个过程,使调用更加简单。它接受一个包含多种选项的...
- `"parsererror"`:服务器返回的数据无法解析(可能是因为数据格式错误)。 处理错误时,我们通常会显示一条用户友好的错误消息,并记录日志以便于调试: ```javascript error: function(jqXHR, textStatus, ...
案例1:当 `textStatus` 为 "parsererror" 时,这表明前端尝试解析 JSON 数据失败。可能的原因是服务器返回的不是有效的 JSON 格式,或者额外包含了非 JSON 的文本。例如,响应可能是 `5{“status”:“success”}`...
在AJAX请求的error事件中,除了超时之外,还可能遇到其他类型的错误,如服务器错误("error")、未修改("notmodified")和解析错误("parsererror")。开发者可以根据需要处理这些不同的错误类型。 除了错误处理...
这个回调函数得到2个参数: jqXHR (in jQuery 1.4.x, XMLHTTPRequest) 对象和一个描述成功请求类型的字符串("success", "notmodified", "error","timeout", or "parsererror") 。在jQuery 1.5, complete设置可以...
例如,使用jQuery的`.ajax()`方法: ```javascript $.ajax({ url: "responseXML.asp", // 服务器端处理文件 type: "POST" 或 "GET", dataType: "xml", // 告诉jQuery期望返回的数据类型为XML data: { key1: ...
需要设置`submit`事件来阻止默认的表单提交行为,并使用jQuery的`$.ajax()`或`$.post()`方法手动发送数据。 ```javascript $("#dialog-form").submit(function(event) { event.preventDefault(); // 阻止默认...
+ ajax的error回调的第二个参数可能值"timeout", "error", "notmodified" 和 "parsererror" + ajax参数xhr * animate 的duration为0的问题 * show, hide, toggle, slideDown, slideUp, slideToggle 在jQuery 1.3中,...
+ ajax的error回调的第二个参数可能值"timeout", "error", "notmodified" 和 "parsererror" + ajax参数xhr * animate 的duration为0的问题 * show, hide, toggle, slideDown, slideUp, slideToggle 在jQuery 1.3中,...
例如,使用jQuery的`$.ajax`方法: ```javascript $.ajax({ url: '/your-endpoint', type: 'GET', dataType: 'html', // 指定返回数据类型为HTML success: function(response) { var decodedHtml = ...
`XMLHttpRequest`对象包含了关于请求的所有信息,`textStatus`通常是"error"、"timeout"、"notmodified"或"parsererror",而`errorThrown`则是JavaScript抛出的错误对象。 ```javascript error: function ...
可以使用jQuery库简化这一过程: ```javascript $(document).ready(function() { $("#checkUsername").click(function() { const username = $("#usernameInput").val(); if (username) { $.ajax({ type: ...
`statusText`是XMLHttpRequest对象中返回的状态文本,例如,“error”、“timeout”、“parsererror”等,通过这种方式可以显示给用户相应的错误提示,提高了用户体验。 举个例子: ```javascript $("#divResult")....
1. **error 方法**:这是在发生错误时触发的自定义错误处理函数。可以用于定义在发生错误时执行的操作。 2. **parseJSON 方法**:这个方法用于将一个JSON格式的字符串转换成JavaScript对象。在处理JSON数据前,该...