2013-08-16 13 views
10

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.

+2

non possibile senza intervento lato server. Nota, non deve essere * il tuo * server, google YQL. –

+1

Oppure leggi l'articolo qui: http: //learn.jquery.com/ajax/working-with-jsonp/ –

+0

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. –

risposta

1

Questo non funziona in tutti i browser, ma a seconda della versione di jQuery si sta utilizzando prova:

$.support.cors = true; 

Ovviamente questo dipende anche sulle intestazioni della risposta del server.

Problemi correlati