2016-11-29 5 views
2

Ich versuche nur, meinen Kopf um JSON/JSONP zu wickeln und Domain-Probleme zu überwinden.Warum braucht JSONP hier nicht?

Hier ist ein Beispiel, das ich gefunden habe.

$(document).ready(function() { 
    var user = "jamesbarnett"; //treehouse username 

    /* get treehouse profile info via JSON */ 
    $.getJSON("https://teamtreehouse.com/" + user + ".json", function(data) { 
    console.log(data);// intialize list 
    $("#badges").html('<ol>'); 
    var output = ""; 
    /* loop through the JSON, parse out badge name & icon 
    wrap it in some HTML. */  
    for (var i in data.badges) { 
     output += "<li>"; 
     output +="<figure>"; 
     output +="<figcaption>" + data.badges[i].name + "</figcaption>"; 
     output += "<img src = '" + data.badges[i].icon_url + "'/>"; 
     output+="</figure>"; 
     output += "</li>";  
    } 
    $("#badges ol").append(output); // append li 
    $("#badges ol").append('</ol>'); // close list 

    /* hide spinner and then output HTML we built in the for loop */ 
    $(".spinner").hide(); 
    }); 
}); 

https://codepen.io/jamesbarnett/pen/oHsvr

Kann jemand bitte, warum in diesem Beispiel erklären gibt es keine Cross-Domain-Fragen (und die Person benötigt nicht JSONP verwenden)

Da die Daten aus Treehouse kommt Domain ... und wird auf codepen.io angezeigt .... ist das keine Cross-Domain? Hier

+1

Vermutlich, weil die Antwort von 'teamtreehouse.com' Domäne CORS-Header enthält, die die Anforderung von der erforderlichen Domäne –

+1

stammen können Beachten Sie auch, dass JSON und JSONP nicht austauschbar sind. Sie müssen verwenden, was der Endpunkt Ihnen gibt. –

Antwort

1

ist eine Antwort von curl -v https://teamtreehouse.com/jamesbarnett.json:

< HTTP/1.1 200 OK 
... Response truncated for brevity ... 
< X-Content-Type-Options: nosniff 
< Access-Control-Allow-Origin: * 
< Access-Control-Allow-Methods: GET, OPTIONS 
< Access-Control-Max-Age: 1728000 
< ETag: W/"497006ef8221ce12b09998c0cdee8153" 
< Cache-Control: max-age=0, private, must-revalidate 
... Response truncated for brevity ... 

Hinweis Access-Control-Allow-Origin: *. Dies bedeutet, dass sie jeder Domäne erlauben, eine XHR-Anfrage zu senden. Daher kein CORS-Fehler.

+0

Danke Piyush. Also kann jede Seite (an ihrem Ende) konfigurieren, ob CORS erlaubt ist oder nicht? Ich wusste es nicht. Prost – swisstony

Verwandte Themen