2013-08-16 6 views
10

Ich versuche, eine JSON von dieser URL zu erhaltenjQuery Cross Domain anfordern JSON Antwort ohne Rückruf

http://www.iheartquotes.com/api/v1/random?format=json 

über jQuery abzurufen. Ich weiß, dass die Lösung JSONP ist, aber da ich keine Kontrolle über den Antworttext des Dienstes habe oder ihn in meine eigene Callback-Funktion einbinden möchte, ist es mein Ziel, irgendwie die Antwort der oben genannten URL mithilfe von Client-End-Skripten abzurufen.

Ich habe fast alle Methoden aus mehreren Antworten von StackOverflow versucht. Dies sind die Code-Blöcke, die ich ausprobiert habe und die Antwort habe ich.

1.

$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json", 
    function(data) { 
    alert(data);   
    }); 

Antwort Ein direkter Aufruf, das die erwarteten Access-Control-Allow-Origin Fehler zurückgegeben:

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. Der obige Code mit dem Callback-Parameter hinzugefügt:

$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json&callback=?", 
    function(data) { 
    alert(data);   
    }); 

Antwort:

Uncaught SyntaxError: Unexpected token :

Bitte beachten Sie, dass, wenn ich auf den Fehler klicken, wird es mich auf die erwartete JSON-Antwort erfolgt.

{"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"} 

Dies wird auch erwartet, da in der Antwort keine Callback-Funktion definiert ist.

3. Durch jQuery Ajax-Methode

$.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    url: "http://www.iheartquotes.com/api/v1/random?format=json", 
    success: function(data){   
    alert(data); 
    }, 
}); 

Antwort:

Uncaught SyntaxError: Unexpected token :

Hinzufügen des Callback-Parameter an die obige Funktion nicht die Antwort nicht ändert.

Haben Sie Hilfe oder Hinweise von den Experten, um den JSON von der URL abzurufen? Ich teste das mit den Chrome-Entwicklungstools. Ich weiß, dass ich den Dienst vom Server-End-Code anrufen und dann an das Client-Ende senden konnte. Aber ich möchte sehen, ob dies durch jQuery allein vom Client-Ende aus geschehen kann.

EDIT: Basierend auf Kevin B's Kommentar: Got die erwartete Ausgabe über YQL mit jQuery Ajax. Aber meine Frage bleibt dieselbe. Gibt es eine native Möglichkeit, dies über jQuery zu tun, da YQL immer noch eine Abhängigkeit ist?

// 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 
    } 
}); 

Dies gibt die erwartete Antwort.

+2

nicht möglich ohne serverseitigen Eingriff. Beachten Sie, dass es nicht * Ihr * Server, Google YQL sein muss. –

+1

Oder sehen Sie den Artikel hier: http: //learn.jquery.com/ajax/working-with-jsonp/ –

+0

Hey @ KevinB, danke ein Haufen für den YQL-Zeiger. Ihre Vorschläge haben in gewisser Weise funktioniert. Ich habe meine Frage so bearbeitet, dass sie auch den neuen Code enthält. –

Antwort

1

Dies wird in allen Browsern nicht funktionieren, aber je nachdem, welche Version von JQuery Sie verwenden versuchen:

$.support.cors = true; 

Offensichtlich hängt dies auch von den Header der Antwort des Servers.