【问题标题】:jQuery.getJSON callback not being reached未达到 jQuery.getJSON 回调
【发布时间】:2012-05-31 10:18:42
【问题描述】:

我一天中大部分时间都在努力解决这个问题,我只是被难住了。

我有一个 .NET 网络服务,它返回一个 JSON 序列化响应,并试图用一个可以访问更多数据进行序列化的新服务将其切换出来。就处理请求的逻辑而言,这两个服务看起来都是一样的。都将 ContentType 设置为 application/json 并写入流。

我正在使用 jQuery 1.7.1 在客户端,我将带有 URL 的 getJSON 发送到工作端点。 Firebug 显示返回的结果,充满数据,并在 JSONLint 和其他中验证。我设置了一个 .ajaxSetup() 来捕获 onError 事件,我得到了这个:

textStatus: parsererror
Error Thrown: Error: jQuery17109478366139694514_1337880510219 was not called
jqXHR Response Text: undefined

(我格式化了消息)

我正在查看的 JSON 是一堆这样的:

[
    {
        "sourceType": "KML",
        "dataUrl": "http://firefly.geog.umd.edu/kml/download.php?file=kml_global_modis-hotspots.kml",
        "id": "https://example.com/KmlFeeds::KMLFeeds::FIRMS::World",
        "title": "FIRMS - World",
        "description": "MODIS hotspot / fire and burned area",
        "originator": "NASA LANCE",
        "spatialDomain": null
    },
    {
        "sourceType": "KML",
        "dataUrl": "http://firefly.geog.umd.edu/kml/download.php?file=Alaska_24h.kml",
        "id": "https://example.com/KmlFeeds::KMLFeeds::FIRMS::Alaska",
        "title": "FIRMS - Alaska",
        "description": "MODIS hotspot / fire and burned area",
        "originator": "NASA LANCE",
        "spatialDomain": null
    },
...
]

(spatialDomain 有时有边界框坐标,字符串中只有逗号分隔的小数)

我的旧 Web 服务返回相同的内容,但有几个不同标签的键。使用新服务,我永远不会收到将所有这些数据发布到站点的回调。它肯定会回到我身边,无论如何我看起来都是有效的。

我想认为新服务有些问题 - 如果我只是将请求 URL 切换回旧的,我的客户端就可以正常工作。但是响应作为有效的 JSON 返回,所以我无法弄清楚它是如何在进入成功回调时遇到问题的。想法?

【问题讨论】:

    标签: jquery .net json web-services jsonp


    【解决方案1】:

    看起来 jQuery 期待 JSONP Web 服务,但服务器没有正确调用 JSONP 回调。

    发布您的 getJSON 调用。另外,您能否发布调用 getJSON 和 Web 服务的页面的域(必要时将它们屏蔽掉),以便我们查看它是否是跨域的。

    编辑:看起来它必须是跨域的,因为同一服务器上的不同端口是considered cross-domain。所以这意味着你想使用 JSONP。问题似乎是您的新服务没有正确地服务 JSONP(可能它正在服务 JSON)。你应该看看新旧配置的区别。

    【讨论】:

    • 当然:jQuery.getJSON(jsonUrl+"&callback=?", jsonSourcesReceived); 我的旧服务实际上是跨域的:http://PRIVATE/KmlFeeds/kmlcatalogservice.ashx 新服务是 localhost,因为我正在尝试更多地开发它http://localhost:61202/DataCatalogService/datacatalogservice.ashx?op=getdatasources&includetypes=kml&format=json
    • @ZacharyKanePride,与调用getJSONlocalhost 域相同吗?另外,生产中会跨域吗?
    • 这种可能性是肯定存在的。现在,托管数据目录服务的本地主机与托管我的客户端的本地主机相同,只是端口不同。
    • 问题是,旧服务(在 PRIVATE)在不同的服务器上。我一直在使用 getJSON() 来获得该响应,并且它工作得很好。我假设在跨域情况下应该需要另一种方法/逻辑?
    • @Zachary,所以我认为它必须是 JSONP,但事实并非如此。看看这两个服务的区别(服务器端代码和配置)。
    猜你喜欢
    • 2010-10-09
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多