`
xiejin2008
  • 浏览: 125672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jQuery ajax返回parsererror错误的解决方法

 
阅读更多

jQuery ajax返回parsererror错误的解决方法

标签: AJAXJavaScriptjQueryparsererror

在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方法的改进

分享到:
评论

相关推荐

    完美解决ajax跨域请求下parsererror的错误

    首先,"parsererror"是jQuery或JavaScript中的一个错误类型,通常发生在尝试解析返回的响应数据时失败。这可能由于多种原因,例如服务器返回的数据格式不符合预期,或者是JSON格式不正确。当AJAX请求的`dataType`...

    JQuery ajax中error返回错误及一直返回error的解答

    本文将详细探讨`jQuery.ajax()`中遇到的`error`返回错误以及为何会一直返回`error`的情况。 首先,`jQuery.ajax()`的`async`参数默认设置为`true`,意味着请求是异步的,即在等待服务器响应的同时,浏览器可以继续...

    jquery中ajax使用error调试错误的方法

    下面是关于如何在jQuery中通过ajax的error方法调试错误的详细知识点。 ### jQuery Ajax Error方法 在jQuery中,当使用ajax方法发起异步请求时,可以通过配置选项中的`error`回调函数来处理请求失败的情况。这个...

    jquery ajax方法实现实例

    6. **error**:请求失败时的回调函数,提供三个参数:`jqXHR`(jQuery封装的XMLHttpRequest对象)、`textStatus`(错误状态,如'timeout'、'error'、'parsererror'等)和`errorThrown`(错误信息)。 以下是一个...

    Saving ASP.Net Form Data with jQuery AJAX and JSON Parser

    首先,我们需要理解jQuery的AJAX方法。AJAX(Asynchronous JavaScript and XML)允许我们在后台与服务器通信,无需刷新整个页面。jQuery的`$.ajax()`函数封装了这个过程,使调用更加简单。它接受一个包含多种选项的...

    MVC_TIP5:JQuery_AJAX错误捕获

    - `"parsererror"`:服务器返回的数据无法解析(可能是因为数据格式错误)。 处理错误时,我们通常会显示一条用户友好的错误消息,并记录日志以便于调试: ```javascript error: function(jqXHR, textStatus, ...

    jQuery中ajax错误调试分析

    案例1:当 `textStatus` 为 "parsererror" 时,这表明前端尝试解析 JSON 数据失败。可能的原因是服务器返回的不是有效的 JSON 格式,或者额外包含了非 JSON 的文本。例如,响应可能是 `5{“status”:“success”}`...

    jQuery AJAX timeout 超时问题详解

    在AJAX请求的error事件中,除了超时之外,还可能遇到其他类型的错误,如服务器错误("error")、未修改("notmodified")和解析错误("parsererror")。开发者可以根据需要处理这些不同的错误类型。 除了错误处理...

    jQuery 1.6 API 中文版

    这个回调函数得到2个参数: jqXHR (in jQuery 1.4.x, XMLHTTPRequest) 对象和一个描述成功请求类型的字符串("success", "notmodified", "error","timeout", or "parsererror") 。在jQuery 1.5, complete设置可以...

    Ajax实现responseXML返回信息显示

    例如,使用jQuery的`.ajax()`方法: ```javascript $.ajax({ url: "responseXML.asp", // 服务器端处理文件 type: "POST" 或 "GET", dataType: "xml", // 告诉jQuery期望返回的数据类型为XML data: { key1: ...

    jQuery dialog form 提交 后台不能取值的解决办法

    需要设置`submit`事件来阻止默认的表单提交行为,并使用jQuery的`$.ajax()`或`$.post()`方法手动发送数据。 ```javascript $("#dialog-form").submit(function(event) { event.preventDefault(); // 阻止默认...

    jQuery 1.3 API 参考文档中文版 html

    + ajax的error回调的第二个参数可能值"timeout", "error", "notmodified" 和 "parsererror" + ajax参数xhr * animate 的duration为0的问题 * show, hide, toggle, slideDown, slideUp, slideToggle 在jQuery 1.3中,...

    jQuery1.3API参考文档中文版

    + ajax的error回调的第二个参数可能值"timeout", "error", "notmodified" 和 "parsererror" + ajax参数xhr * animate 的duration为0的问题 * show, hide, toggle, slideDown, slideUp, slideToggle 在jQuery 1.3中,...

    java+ajax处理乱码实例

    例如,使用jQuery的`$.ajax`方法: ```javascript $.ajax({ url: '/your-endpoint', type: 'GET', dataType: 'html', // 指定返回数据类型为HTML success: function(response) { var decodedHtml = ...

    设置默认Ajax操作cache and error

    `XMLHttpRequest`对象包含了关于请求的所有信息,`textStatus`通常是"error"、"timeout"、"notmodified"或"parsererror",而`errorThrown`则是JavaScript抛出的错误对象。 ```javascript error: function ...

    ajax 检测用户名是否被占用

    可以使用jQuery库简化这一过程: ```javascript $(document).ready(function() { $("#checkUsername").click(function() { const username = $("#usernameInput").val(); if (username) { $.ajax({ type: ...

    jquery中页面Ajax方法$.load的功能使用介绍

    `statusText`是XMLHttpRequest对象中返回的状态文本,例如,“error”、“timeout”、“parsererror”等,通过这种方式可以显示给用户相应的错误提示,提高了用户体验。 举个例子: ```javascript $("#divResult")....

    jQuery1.6 使用方法一

    1. **error 方法**:这是在发生错误时触发的自定义错误处理函数。可以用于定义在发生错误时执行的操作。 2. **parseJSON 方法**:这个方法用于将一个JSON格式的字符串转换成JavaScript对象。在处理JSON数据前,该...

Global site tag (gtag.js) - Google Analytics