Sto cercando di recuperare un JSON da questo URLjQuery tra domini richiesta per ottenere risposta JSON senza richiamata
http://www.iheartquotes.com/api/v1/random?format=json
tramite jQuery. So che la soluzione è JSONP, ma dal momento che non ho alcun controllo sul testo di risposta del servizio o per avvolgerlo nella mia funzione di callback, il mio obiettivo è quello di recuperare in qualche modo la risposta dell'URL precedente utilizzando gli script client-end.
Ho provato quasi tutti i metodi suggeriti da diverse risposte di StackOverflow. Questi sono i blocchi di codice che ho provato e la risposta che ho.
1. Una chiamata diretta che ha restituito l'errore previsto Access-Control-Allow-Origin
$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json", function(data) { alert(data); });
Risposta:
XMLHttpRequest cannot load =1376682146029">http://www.iheartquotes.com/api/v1/random?format=json&=1376682146029. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.
2. Il codice di cui sopra con il parametro di callback ha aggiunto:
$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json&callback=?", function(data) { alert(data); });
Risposta:
Uncaught SyntaxError: Unexpected token :
prega di notare che quando si fa clic su un errore, mi prende alla risposta JSON previsto.
{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly! The bastard's rich!\n\n\t\t-- Homer Simpson\n\t\t Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}
Questo è anche previsto poiché non è definita alcuna funzione di callback nella risposta.
3. Attraverso il metodo Ajax jQuery
$.ajax({ type: "GET", dataType: "jsonp", url: "http://www.iheartquotes.com/api/v1/random?format=json", success: function(data){ alert(data); }, });
Risposta:
Uncaught SyntaxError: Unexpected token :
aggiungendo il parametro di callback per la funzione di cui sopra non cambia la risposta.
Qualsiasi aiuto o indicazioni da parte degli esperti per recuperare il JSON dall'URL? Sto testando questo da Chrome Dev Tools. So che potrei chiamare il servizio dal codice di fine server e poi inviarlo al client-end. Ma voglio vedere se questo può essere fatto attraverso jQuery da solo dal client-end.
MODIFICA: Sulla base del commento di Kevin B: Ottenuto l'output previsto tramite YQL utilizzando Ajax di jQuery. Ma la mia domanda rimane la stessa. C'è un modo nativo per farlo tramite jQuery dato che YQL è ancora una dipendenza?
// Using YQL and JSONP
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
// the name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// tell jQuery we're expecting JSONP
dataType: "jsonp",
// tell YQL what we want and that we want JSON
data: {
q: "select * from json where url=\"http://www.iheartquotes.com/api/v1/random?format=json\"",
format: "json"
},
// work with the response
success: function(response) {
console.log(response.query.results.json); // server response
}
});
Questo dà la risposta prevista.
non possibile senza intervento lato server. Nota, non deve essere * il tuo * server, google YQL. –
Oppure leggi l'articolo qui: http: //learn.jquery.com/ajax/working-with-jsonp/ –
Ehi @KevinB, grazie un po 'per il puntatore YQL. I tuoi suggerimenti hanno funzionato, in un certo senso. Ho modificato la mia domanda per includere anche il nuovo codice. –