【问题标题】:JSON Call Back IssueJSON 回调问题
【发布时间】:2014-01-23 16:35:50
【问题描述】:

我怎样才能获得这样的 JSON url 数据?

http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json?apikey=Removed_My_API_Key'

当我像这样复制和粘贴数据时

var titles = {
    "cast": [{
        "id": "162664630",
            "name": "Sylvester Stallone",
            "characters": ["Barney Ross"]
    }, {
        "id": "162653720",
            "name": "Jason Statham",
            "characters": ["Lee Christmas"]
    }, {
        "id": "162652223",
            "name": "Jet Li",
            "characters": ["Yin Yang"]
    }, {
        "id": "162664307",
            "name": "Dolph Lundgren",
            "characters": ["Gunnar Jensen"]
    }, {
        "id": "162670654",
            "name": "Chuck Norris",
            "characters": ["Booker"]
    }, {
        "id": "326392465",
            "name": "Terry Crews",
            "characters": ["Hale Caesar"]
    }, {
        "id": "770731413",
            "name": "Randy Couture",
            "characters": ["Toll Road"]
    }, {
        "id": "770833479",
            "name": "Liam Hemsworth",
            "characters": ["Billy the Kid"]
    }, {
        "id": "770704326",
            "name": "Scott Adkins",
            "characters": ["Hector"]
    }, {
        "id": "770670020",
            "name": "Nan Yu",
            "characters": ["Maggie"]
    }, {
        "id": "162670708",
            "name": "Jean-Claude Van Damme",
            "characters": ["Jean Vilain"]
    }, {
        "id": "162652509",
            "name": "Bruce Willis",
            "characters": ["Mr. Church"]
    }, {
        "id": "162662233",
            "name": "Arnold Schwarzenegger",
            "characters": ["Trench"]
    }, {
        "id": "489251774",
            "name": "Amanda Ooms",
            "characters": ["Pilar"]
    }, {
        "id": "377608335",
            "name": "Charisma Carpenter",
            "characters": ["Lacy"]
    }, {
        "id": "771417014",
            "name": "Nikolette Noel",
            "characters": ["Sophia"]
    }],
        "links": {
        "rel": "http://api.rottentomatoes.com/api/public/v1.0/movies/771238417.json"
    }
},
star,
staring = [];

for (star = 0; star < titles.cast.length; star++) {
    staring.push(titles.cast[star].name + ' as ' + titles.cast[star].characters[0]);
}

document.getElementById('Credits').innerHTML = staring.join(', ');

它使用上面的代码工作,我试图弄清楚如何直接从 URL 本身获取它。

我尝试了以下方法

var movieUrl = 'http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json?apikey=Removed_My_API'

$(document).ready(function() {

  $.ajax({
    url: moviesSearchUrl + encodeURI(query),
    dataType: "jsonp",
    success: searchCallback
  });
});


function searchCallback(data) {
 var titles = data.cast    
star,
staring = [];

for (star = 0; star < titles.cast.length; star++) {
    staring.push(titles.cast[star].name + ' as ' + titles.cast[star].characters[0]);
}

document.getElementById('Credits').innerHTML = staring.join(', ');}

使用这个 JS Fiddle http://jsfiddle.net/6yYYZ/ ,有人可以帮忙吗?

【问题讨论】:

  • 我收到{"error":"Account Inactive"}
  • 您确定该 API 可以用作 JSONP 服务吗? edit 从文档来看,它确实似乎不支持 JSONP。我认为该服务旨在成为您从 服务器 而非 Web 客户端使用的东西。
  • @A1rPun 我删除了我的 api 密钥,但它输出的数据与顶部列出的相同。它是所有数据的直接复制和粘贴
  • @A1rPun 你当然会得到,因为 url 没有 api 密钥。
  • @Pointy 确实有效......他只是有一些自升式代码。一些调整,它的工作原理。

标签: javascript jquery json


【解决方案1】:

您的代码中有很多错误,我已部分修复它以便您取回数据

最重要的修复是您的 ajax 调用中的 url 错误,我已修复。

var movieUrl = 'http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json?apikey=API_KEY'

$(document).ready(function() {

  $.ajax({
    url: movieUrl,
    dataType: "jsonp",
    success: searchCallback
  });
});


function searchCallback(data) {

    console.log(data); // do stuff with your json here

}

http://jsfiddle.net/6yYYZ/5/

【讨论】:

  • 您刚刚在互联网上发布了您的 API 密钥。我不认为这是明智的。
  • 这不是我的,他的已经在小提琴中了,所以被公开了,我现在将其删除。感谢您的通知
  • 嗯,好的。我只是不想让人们惹上麻烦:)
  • 已经粘贴了,去修改吧! (j/k)“天啊,不是我的 rotTom API 访问权限!$@#$@#”
  • @dandavis 他们很容易找到所以没什么大不了的,但是我改变了它以防万一哈哈
【解决方案2】:

除了错别字,主要问题是titles = data.cast,因为稍后您引用titles.cast.length... 并且由于您已经将titles 设置为cast 的值,所以.cast 出现null 然后对它执行.length 会出错。

当您只设置titles = data(与您只是复制和粘贴数据时相同)时它可以工作,因为现在.cast 存在。这是我的小提琴中的内容(由于 apiKey 而被删除,尽管我怀疑那是否是您的公钥并且无论如何都会在您的任何公共网页上可见)。

var movieUrl = 'http://api.rottentomatoes.com/api/public/v1.0/movies/770672122/cast.json?apikey=Removed_My_API'

$(document).ready(function() {    
    $.ajax({
        url: movieUrl, //this was wrong
        dataType: "jsonp",
        success: searchCallback
    });
});


function searchCallback(data) {
    var titles = data, //just set it to data  
        star = 0, //initialize star
        staring = [];

    for (star = 0; star < titles.cast.length; star++) {
        staring.push(titles.cast[star].name + ' as ' + titles.cast[star].characters[0]);
    }

    document.getElementById('Credits').innerHTML = staring.join(', ');
}

【讨论】:

  • 谢谢,我不认为将我的 api 放在那里会造成太大的伤害,但我已经更改了它以防万一。我主要在我的网站后端使用它。
  • @Craig nah 大多数人都会有一个公共 API 密钥,无论如何您都必须将其用于客户端逻辑......所以人们可以看到它。 secret,你在服务器端使用的东西是要隐藏的大的。
猜你喜欢
  • 2015-03-02
  • 2014-01-01
  • 2012-08-04
  • 2010-12-20
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多