2015-08-31 8 views
8

Hallo Ich versuche NUR JavaScript und HTML zu verwenden, um das json Objekt von einer URL zu lesen. Ich verwende den folgenden Code ein:Javascript Crossdomäne JSON

function getJSONP(url, success) { 

    var ud = '_' + +new Date, 
     script = document.createElement('script'), 
     head = document.getElementsByTagName('head')[0] 
      || document.documentElement; 

    window[ud] = function(data) { 
     head.removeChild(script); 
     success && success(data); 
    }; 

    script.src = url.replace('callback=?', 'callback=' + ud); 
    head.appendChild(script); 
} 

getJSONP('http://webURl?&callback=?', function(data){ 
    console.log(data); 
}); 

Wie Sie ich hätte das gedacht Not at same origin as the document, and parent of track element does not have a 'crossorigin' attribute. Origin 'null' is therefore not allowed access. bekommen

FYI der Server JSON-Daten zurück und haben Callback-Funktion doesnot.

Prost für Ihre Hilfe.

+1

Wenn der Server JSONP nicht unterstützt und CORS nicht unterstützt, haben Sie kein Glück. JavaScript funktioniert nicht in der gleichen Herkunftsrichtlinie. Es ist aus einem bestimmten Grund da. – epascarello

+0

@epascarello Sie denken also Wenn der Server JSONP unterstützt, dann wird dieser Code gut funktionieren. – usrNotFound

+0

Es sollte für JSONP funktionieren – epascarello

Antwort

7

Der Server muss entweder CORS haben aktiviert Header wie folgt aus: (Credits auf die Antwort hier: CORS with php headers)

// Allow from any origin 
if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true'); 
    header('Access-Control-Max-Age: 86400'); // cache for 1 day 
} 

// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS");   

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
     header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

    exit(0); 
} 

Oder der Server zur Ausgabe JSONP muss wie:

echo $_GET['callback'] . '(' . json_encode($whatever) . ')'; 

Eine andere Möglichkeit, wenn dies nicht auf Ihrem eigenen Server ist, ist eine PHP-Datei auf Ihrem eigenen Server zu erstellen, die eine filegetcontents auf der URL, die Sie lesen müssen (mit den JSON-Daten ohne Cors), und die gleichen Daten im JSONP-Format echo. Sie können diese neue PHP-Datei (URL) dann in Ihrer reinen JavaScript-Funktion getJSON verwenden.

Ohne einen Server in der Mitte oder Cors oder Jsonp, ist es nicht möglich.

+0

Stehlen Sie keine anderen Antworten! http://stackoverflow.com/questions/8719276/cors-with-php-headers – GuyT

+0

Entschuldigung, ich hätte den Link tatsächlich hinzugefügt. Bearbeitete meine Antwort, um den Link einzuschließen. Danke, dass du es bemerkst. –

4

Wenn Sie eine schnelle & arbeiten fix möchten, können Sie den Inhalt über einen iframe, holen oder einen Proxy wie YQL verwenden.

Aber ich würde empfehlen, eine Backend-Strategie zu verwenden, um Ihre Inhalte zu holen, dann verarbeiten Sie es mit Javascript.