如何解决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“解析器错误”的主要内容,如果未能解决你的问题,请参考以下文章
带有 jsonp 内容类型的 jQuery.ajax 请求后的解析器错误
JQuery - $.ajax() - 使用 JSONP 的跨域 - 仅在 IE 8 中获取“解析器错误”(在 IE 7 中工作)