如何解决jquery“解析器错误”

Posted

技术标签:

【中文标题】如何解决jquery“解析器错误”【英文标题】:how to resolve jquery "parser error" 【发布时间】:2014-01-09 01:38:31 【问题描述】:

我正在尝试从我的客户端脚本中使用 dataType JSONP 进行 ajax 调用,服务 uri 属于本地托管的 restful wcf 服务。

下面是我的客户端脚本:

function callback() 
     alert("callback");
 
 

     $.ajax(
         url: "http://localhost:999/Service1.svc/Get/rajesh",

         // the name of the callback parameter
         jsonp: "callback",

         // tell jQuery we're expecting JSONP
         dataType: "jsonp",

         // work with the response
         success: function (response) 
             console.log(response); // server response
         ,
         error: function ( jqXHR, textStatus, errorThrown) 
             alert("errorThrown: " + errorThrown + " textStatus:" + textStatus);
        
     );

我得到以下错误:

1) 错误警报消息

errorThrown: Error: jQuery1910367527295252279_1387528759305 was not called textStatus:parsererror

2)控制台出错

控制台错误 json 对象不正确,但我认为它是最新的。 任何帮助表示赞赏

【问题讨论】:

尝试将其放入 $(function() ) 并检查是否有任何不同 @RononDex:这与 DOM 就绪无关。 好吧,你得到的那个 jquery[number] 对 jquery 来说很常见。它将这些 id 添加到它在 dom 中使用的 html 元素上。这就是为什么我认为它可能会有所不同 【参考方案1】:

从错误来看,您的服务器似乎正在响应JSON,而不是JSONP,因为错误引用了:

"GetEmployeeResult":"success"

...这是 JSON,但 JSONP 响应看起来像:

jQuery34978249823_23049820394("GetEmployeeResult":"success")

...其中函数名jQuery34978249823_23049820394来自请求中的回调参数(并且每次都会变化)。

要更正它,让服务器返回 JSONP,或将您的 $.ajax 调用更改为使用 JSON(假设 SOP 不是问题)。

【讨论】:

我尝试将 jsonp 替换为 Json,但它仍然会出错函数将 jqXHR.status 显示为 0 并将 textStatus 显示为错误 @VivekP:这表明你正在尝试做一些跨域的事情,而 JSONP 是更好的选择。 @Crowder 是的,为了实现跨域我使用了jsonp。 @VivekP:对。因此,服务器必须尊重合同的一方,并返回 JSONP,而不是 JSON。【参考方案2】:

在此处查看可用答案:

How to natively enable JSONP for existing WCF service?

寻找可能的解决方案。听起来您需要重新配置 wcf 以返回 JSONP 而不是 JSON。

【讨论】:

以上是关于如何解决jquery“解析器错误”的主要内容,如果未能解决你的问题,请参考以下文章

Helm 升级引发 YAML 解析器错误

带有 jsonp 内容类型的 jQuery.ajax 请求后的解析器错误

如何修复解析器错误消息:无法加载类型?

JQuery - $.ajax() - 使用 JSONP 的跨域 - 仅在 IE 8 中获取“解析器错误”(在 IE 7 中工作)

Thymeleaf + Boot + AngularJS 指令解析器错误

如何解决jquery与zepto冲突问题