资源解释为脚本,但使用MIME类型application / json进行传输。 &parsererror

好的,所以我在.html文件中有一个JQuery AJAX调用,坐在我的桌面上。 它调用位于以太网上的Web服务器上的WCF服务。

好消息是它有效。 排序……几乎……但并非完全。

AJAX调用将执行, Fiddler显示来自Web服务的JSON响应。 不幸的是,它并没有一直回到浏览器。 callback=? 是的,所以我没有得到跨站点脚本错误。 (访问控制等等等等)

如果我使用Chrome的开发工具打开它,它会给我以下消息:

 Resource interpreted as script but transferred with MIME type application/json 

成功:没有调用回调,而错误:callback在statusText: parsererror中返回一个单词

我一整天都在喋喋不休。

 function AJAXGet() { $.ajax({ url: "http://xxxx/yyyyService/yyyyService.svc/GetZZZ?callback=?", dataType: 'json', data: JSON.stringify('{"customerID": "1"}'), contentType: "application/json; charset=utf-8; application/x-javascript", success: function (data) { alert(data); }, complete: function (data) { alert(data); }, error: function (xhr) { alert("AJAXGetError: " + xhr.statusText); } }); } 

Fiddler说这是发送的内容: GET /yyyyService/yyyyService.svc/GetZZZ?callback=jQuery150833801421286173_1297309350515&%22{\%22yyyyID\%22:%20\%221\%22}%22&_=1297309350540 HTTP/1

这是WCF:

 [OperationContract] [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] List GetNotes(string yyyyID) 

您正在使用JSONP – 您的服务器端代码必须支持它。 在这种情况下,你的WCF服务应该返回一个脚本 – 例如[callback name]([json string]) ,其中[callback name]将是jquery生成的js函数(你在fiddler请求中看到的回调值)和[ json string]将来自服务的常用JSON数据。 所以检查fiddler中的响应。 如果您的服务没有返回JSONP响应,那么您需要在服务端添加该支持。

查看本文,了解如何在.NET 4中实现它(支持JSONP)。 对于.NET 3.5,它的工作量更大 – 请参阅此MSDN文章 ,将WCF扩展为支持JSONP。 另一个快速入侵(对于.NET 3.5)可能是构建HttpModule,它将监视JSON请求并在请求url具有callback参数时修改响应。