首页 > PHP资讯 > HTML5培训技术 > jQueryajaxparsererrorwasnotcalled的解决办法

jQueryajaxparsererrorwasnotcalled的解决办法

HTML5培训技术

问题介绍

$.ajax({

    type: "GET",

    url: url,

    dataType: "jsonp",

    success: function (result) {

        alert("SUCCESS!!!");

    },

    error: function (xhr, ajaxOptions, thrownError){

        alert(xhr.statusText);

        alert(xhr.responseText);

        alert(xhr.status);

        alert(thrownError);

    }

});

结果:parsererror, 200, undefined,jQuery16404238360976138926_1344922361673 was not called

$ "pun">.ajax "pun">({
    type "pun">:'POST' "pun">,
    url "pun">:"str">"@{FrontEnd.isUsernameAvailable()}" "pun">,
    data "pun">:"str">"name=thisnameisavailable" "pun">,
    cache "pun">:false "pun">,
    success "pun">:function "pun">(data"pun">){ "pln">
        console"pun">.log "pun">("Success... " "pun">);
     "pun">},
    error "pun">:function "pun">(jqXHR"pun">, textStatus "pun">, errorThrown "pun">){"pln">
        console"pun">.log "pun">("Error... ""pun">+ textStatus "pun">+"        ""pun">+ errorThrown "pun">);
     "pun">}, "pln">
    dataType: "str">'json'
"pun">});

结果:Error... parsererror jQuery15001997238997904205_1298484897373was not called

解决此问题

首先分析错误提示:parsererror 是解析器错误,

 jQuery15001997238997904205_1298484897373 was not called 是jQuery150019...此函数没被执行。

那么为什么这个函数没被调用呢?

我们来看一下,jQuery15001997238997904205_1298484897373  这个函数名的来由, 此是在跨域ajax时自动产生的,怎么跨域? jsoncallback=? 就是加一个这个,然后后台代码里也返回这个参数的值就行了。 两段代码里都有dataType、error,那么先来熟悉一下jquery里的ajax怎么介绍它们的?(官方:api.jquery.com/jQuery.ajax)

dataType

类型:String

预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME
类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script
则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:

"xml": 返回 XML 文档,可用 jQuery 处理。

"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。

"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache"
参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的
script标签来加载)

"json": 返回 JSON 数据 。

"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery
将自动替换 ? 为正确的函数名,以执行回调函数。

"text": 返回纯文本字符串

error

类型:Function

默认值: 自动判断 (xml 或 html)。请求失败时调用此函数。

有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。

如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout", "error",
"notmodified" 和 "parsererror"。

这是一个 Ajax 事件。

熟悉了上边的介绍,那么parsererror错误怎么会触发了呢? 其实还是要看跨域问题的。

首先要确保,后台代码返回的是json格式吗? 如果是返回的json头格式是什么? 如果是文本,一般是html,

那么,解析器是要转换成json格式的,  因为,我们定义的dataType : "json",由此可以得到,是解析器在转换的过程中失败的,但是,这也是有概率的,在频繁请求json数据的时候。

因此,解决办法是

方法一:一定要在后台代码,返回数据的时候,指定返回的数据格式: (最好此方法)

context.Response.ContentType = "application/json";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;

同时:要返回规范的json,{R: 1} 这种是不行的,在jquery1.3版本以后是解析不了的。

{"R": 1} 这种的才行。

方法二:

success "pun">:function "pun">(data "pun">){ "pln">
    data = "pln"> JSON."pln">parse( "pln">data); "pln">
     "com">// process data"pln">
},

附:

jQuery16404238360976138926_1344922361673({"R":1,"T":[{"I":"B24B116B","N":"餐饮服务","F":"7"},{"I":"E040-A8C0E801798B","N":"公园景区","F":"6"}]})

HTML5培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持9不支持0