2012-03-27 16 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"); 
      } 
     }); 

informuje o powodzeniu, ale dane były zerowe. Adres url zwraca dane xml, jeśli określimy dataType, możemy uzyskać dane json, ale tutaj nie otrzymywaliśmy żadnych danych.jak wywołać api sieci web za pośrednictwem domeny ajax?

Każda pomoc doceniona.

Odpowiedz

9

JavaScript podlega tym samym zasadom domeny. Oznacza to, że dla bezpieczeństwa skrypt JS w przeglądarce klienta może uzyskać dostęp tylko do tej samej domeny, z której pochodzi.

JSONP nie podlega takim samym ograniczeniom.

Sprawdź docs jQuery na jsonp tutaj:

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

Oto przykład pracy z użyciem jsonp uzyskać dostęp do usługi między domenami za pomocą JQuery AJAX:

http://jsbin.com/idasay/4

I na wypadek gdyby JSBIN usunął tę pastę w przyszłości:

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

Podążyłem już za linkiem, ale nie wygenerowało ono wyniku. – tiru

+0

Z odsyłacza opublikowanego wcześniej: "Ze względu na ograniczenia zabezpieczeń przeglądarki większość żądań" Ajax "podlega tej samej zasadzie pochodzenia, ponieważ żądanie nie może pomyślnie pobrać danych z innej domeny, subdomeny lub protokołu. nie podlegają tym samym ograniczeniom dotyczącym zasad pochodzenia. " –

+0

Zalecam, aby dowiedzieć się, jak osiągnąć to, czego potrzebujesz, korzystając z przykładu JSONP na powyższym łączu. –

0

Wyszukaj typ danych jsonp.

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

Obserwowałem twoją zmianę nakrętki bez rezultatu. – tiru

+0

Musisz przeczytać o jsonp. Jednak strona, do której dzwonisz, nie zwraca danych jsonp. –

2

To niemożliwe, aby korzystać Ajax aby uzyskać dane między domenami bezpośrednio bez zmiany backend. Nazywa się Same origin policy.

Możesz ustawić specjalny nagłówek Access-Control-Allow-Origin w backend (how do to this). Lub możesz użyć JSONP] (http://en.wikipedia.org/wiki/JSONP).

Powiązane problemy