【问题标题】:Not able to Fetch Json无法获取 Json
【发布时间】:2011-03-06 15:31:09
【问题描述】:

我想获取一个 json 以仅在 div 中显示 syn。

类似:--

$.getJSON('http://words.bighugelabs.com/api/2/eba286cdc7f3619674544d80ce94cb1b/stack/json', function(data) {

         //parse the response to display in a div


        });

output format.


来自链接的 JSON 标记:

{
    "noun": {
        "syn": [
            "batch",
            "deal",
            "flock",
            "good deal",
            "great deal",
            "hatful",
            "heap",
            "lot",
            "mass",
            "mess",
            "mickle",
            "mint",
            "muckle",
            "peck",
            "pile",
            "plenty",
            "pot",
            "quite a little",
            "raft",
            "sight",
            "slew",
            "spate",
            "tidy sum",
            "wad",
            "push-down list",
            "push-down stack",
            "smokestack",
            "push-down storage",
            "push-down store",
            "agglomerate",
            "chimney",
            "cumulation",
            "cumulus",
            "large indefinite amount",
            "large indefinite quantity",
            "list",
            "listing",
            "memory device",
            "mound",
            "storage device",
            "whole lot",
            "whole slew"
        ]
    },
    "verb": {
        "syn": [
            "pile",
            "heap",
            "arrange",
            "lade",
            "laden",
            "load",
            "load up",
            "set up"
        ],
        "rel": [
            "heap up",
            "pile up",
            "stack away",
            "stack up"
        ]
    }
}

【问题讨论】:

  • @Matt 不是 json.. 检查我在代码中提供的链接..
  • 你有两个数组。名词.syn 和动词.syn。您可以使用 for 循环并遍历这两个数组并做任何您想做的事情。

标签: jquery json parsing


【解决方案1】:

由于同源策略,JSON 无法加载,只需将 ?callback=? 附加到您的世界即可。更新后的代码,

$.getJSON('http://words.bighugelabs.com/api/2/eba286cdc7f3619674544d80ce94cb1b/stack/json?callback=?', function(data) {
    //parse the response to display in a div
    //you can access the JSON object from the data object.
});

更新:

当您将?callback=? 附加到$.getJSON 中使用的URL 时,jQuery 知道它是一个JSONP 请求而不是一个XMLHttpRequest 来获取JSON。其实回调参数可以是任何东西,但值必须是?才能触发JSONP请求。

当发出请求时,jQuery 将参数替换为 ?callback=jQuery15107307685413397849_1299439987443,每次发出请求时该值都是唯一的。

【讨论】:

  • 非常好!允许请求跨域的“回调”参数提供了什么?它会触发 jQuery 在后台使用某种技巧吗?
  • 是的,我也想知道那个。请解释一下。
  • @JAAulde @user:它使它成为JSONP 请求。
  • 但据我了解,JSONP 需要服务器支持,并且需要服务器的函数调用名称来包裹响应数据。你知道服务器支持 JSONP 吗? “回调=”如何?命名要调用的函数? (不争论,只是想了解)
  • @JAAulde 您请求的服务/服务器确实支持 JSONP。这意味着,无论您作为 callback 参数的值传递什么,都将用作回调函数,并将 JSON 数据作为其参数。 example
【解决方案2】:

你没有提到你遇到了什么问题。照原样,如果您在域“words.bighugelabs.com”上运行发布的代码,那么您可以在回调函数中简单地访问:

data.verb.syn

或任何其他属性。如果您不在该域上,那么您可能会遇到与跨域脚本限制相关的问题。如果是这种情况,您需要研究 JSONP(如果远程服务器支持它)或代理方法。

【讨论】:

  • yaa 我在远程服务器上。我认为这就是它没有运行。
  • 好的,你应该看看远程服务是否有可用的 API 的 JSONP 版本。
【解决方案3】:

好的,我看到了来自您提供的 URL 的 JSON 响应。你可以做这样的事情(你可以通过使用StringBuilder来提高效率):

var list;

var syn = data.noun.syn;

for(var i = 0; i < syn.length; i++)
{
    list += syn[i];
}

syn = data.verb.syn;

for(var i = 0; i < syn.length; i++)
{
    list += syn[i];
}

$('#mydiv').append(list);

以后,请更具体地说明您面临的问题 -

  • 您无法获取 JSON 吗?请参阅@JAAulde 的回答;关于同源政策的部分
  • 您无法解析 JSON 吗?看看我的回答,看看JSON.org 或者this tutorial
  • 还有别的吗?请更新您的问题。

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2015-04-03
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多