2012-03-27 3 views
6
jQuery.ajax({ 
      type: "GET", 
      url: 'http://example.com/restaurant/VeryLogin(username,password)', 
      dataType: "json", 

      success: function (data) { 
       alert(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 

Es warnt den Erfolg, aber die Daten waren null. Die URL gibt XML-Daten zurück, wenn wir den Datentyp angeben, können wir die JSON-Daten abrufen, aber hier wurden keine Daten abgerufen.wie domainübergreifendes Web-API mit Ajax aufrufen?

Jede Hilfe wird geschätzt.

Antwort

9

Javascript unterliegt derselben Domain-Richtlinie. Dies bedeutet für die Sicherheit, dass ein JS-Skript in einem Client-Browser nur auf die gleiche Domäne zugreifen kann, aus der es stammt.

JSONP unterliegt nicht den gleichen Einschränkungen.

Überprüfen Sie die jQuery docs auf JSONP hier:

http://api.jquery.com/jQuery.getJSON/

Hier ist ein funktionierendes Beispiel JSONP der Verwendung eines Cross-Domain-Service via JQuery AJAX zuzugreifen:

http://jsbin.com/idasay/4

Und nur für den Fall, dass JSBIN diese Paste in der Zukunft löscht:

jQuery.ajax({ 
    type: "GET", 
    url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo', 
    dataType: "jsonp", 
    cache: false, 
    crossDomain: true, 
    processData: true, 


    success: function (data) { 
     alert(JSON.stringify(data)); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("error"); 
    } 
}); 
+0

Ich habe bereits den Link verfolgt, aber es hat das Ergebnis nicht produziert. – tiru

+0

Aus dem zuvor angegebenen Link: "Aufgrund der Sicherheitseinschränkungen des Browsers unterliegen die meisten" Ajax "-Anforderungen der gleichen Ursprungsrichtlinie, die Anforderung kann Daten aus einer anderen Domäne, Subdomäne oder einem anderen Protokoll nicht erfolgreich abrufen Skript- und JSONP-Anforderungen unterliegen nicht den gleichen Ursprungsrichtlinien. " –

+0

Ich würde empfehlen, zu sehen, wie Sie erreichen, was Sie benötigen, indem Sie das JSONP-Beispiel unter dem obigen Link verwenden. –

0

Suchen Sie nach Jsonp-Datentyp.

jQuery.ajax({ 
     type: "GET", 
     url: 'http://xxx.com/restaurant/VeryLogin(username,password)', 
     dataType: "jsonp", 
    cache: false, 
     crossDomain: true, 
    processData: true, 

     success: function (data) { 
      alert(data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
+0

ich folgte Ihren Änderungen Nuss noch kein Ergebnis. – tiru

+0

Sie müssen über Jsonp lesen. Die von Ihnen aufgerufene Seite gibt jedoch keine jsonp-Daten zurück. –

2

Es ist unmöglich, Ajax zu verwenden Cross-Domain-Daten ohne Backend-Wechsel direkt zu erhalten. Es heißt Same origin policy.

Sie können den speziellen Header Access-Control-Allow-Origin im Backend (how do to this) festlegen. Oder Sie können JSONP] (http://en.wikipedia.org/wiki/JSONP) verwenden.