2014-01-23 3 views
0

Как я могу получить данные, такие как JSON-url?JSON Call Back Issue

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/, может кто-то пожалуйста помочь?

+0

Я получаю '{ "ошибка": "Account Неактивный"}' – A1rPun

+2

Вы уверены, что этот API можно использовать в качестве службы JSONP? * edit * Он, похоже, не поддерживает JSONP из документации. Я думаю, что сервис предназначен для использования с вашим * сервером *, а не с веб-клиентом. – Pointy

+0

@ A1rPun я удалил свой ключ api, но он выводит те же данные, что и в верхней части. Это прямая копия и вставка всех данных – Craig

ответ

1

Опечатки в стороне, главная проблема была 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(', '); 
} 
+0

Спасибо, я не думайте, что мой api там нанес бы большой вред, но я изменил его уже на всякий случай. В основном я использую его на задней части моего сайта. – Craig

+0

@Craig nah most будет иметь общедоступный ключ API, который вам все равно придется использовать для логики на стороне клиента ... так что люди могут это увидеть. «Тайна», то, что вы используете на стороне сервера, является большой, чтобы скрывать. – MikeSmithDev

+0

Я вижу, еще раз спасибо за помощь – Craig

2

Существовали много ошибок в коде, я частично фиксируется так, что вы получите данные обратно

Самое важное исправление было то, что адрес в вашем АЯКС вызов был не прав, я установил, что.

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/

+2

Вы только что опубликовали свой ключ API в Интернете. Я не думаю, что это мудро. – Pointy

+0

Это был несчастный случай – Craig

+0

Это было не мое, его уже было на скрипке, так что он был обнародован, я сейчас его удалю. Спасибо за уведомление – koningdavid