2013-09-30 9 views
12

Więc tu jest moje powołanie:jquery.ajax Access-Control-Allow-Origin

$.ajax({ 
     url: url, 
     headers: { 'Access-Control-Allow-Origin': '*' }, 
     crossDomain: true, 
     success: function() { alert('it works') }, 
     error: function() {alert('it doesnt work')}, 
     datatype: 'jsonp' 
    }); 

mój adres URL jest legit. Zauważysz, że nie mam zestawu danych. Nie jestem pewien, czy typ danych działa poprawnie, ponieważ zwracane jest jego xml, ale próbowałem tego również. Jest to api do api sportsdata. Na stronie pokazują nagłówek żądania x-originating-ip, więc próbowałem tego, gdzie jest access-control-allow-origin.

Wszystko to nadal zwróciło błąd kontroli dostępu . Nie wiem, jakie są dane, jeśli je ustawię, więc na razie pominąłem. Próbowałem kilku różnych rzeczy, których szukałem w Google, rozumiem, dlaczego otrzymuję błąd. Nie wiem, jak to naprawić. Starałem się nie musiał pytać, ale czy ktoś mógłby wytłumaczyć lub pokazać mi drogę, to byłoby bardzo mile widziane

+4

Serwer musi ustawić nagłówek kontroli dostępu, a nie klienta. –

+0

Cóż, czy nie spieprzyłem? ponieważ nie jest to połączenie z moją maszyną lokalną. serwer nie jest lokalny, ale przeczytałem go w innych postach. dlaczego, jeśli wpiszę adres URL bezpośrednio w przeglądarce, połączenie zadziała, ale z jquery nie działa? – dwarf

+0

Ponadto, jeśli powiesz jQuery, aby oczekiwał JSONP, to serwer musi zwrócić JSONP, a nie XML. –

Odpowiedz

8

http://encosia.com/using-cors-to-access-asp-net-services-across-domains/

patrz powyższy link, aby uzyskać więcej informacji na temat udostępniania zasobów domeny Cross.

Możesz spróbować użyć JSONP. Jeśli interfejs API nie obsługuje jsonp, musisz utworzyć usługę, która będzie pośrednikiem między API a Twoim klientem. W moim przypadku utworzyłem usługę ASMX.

próbka poniżej:

wywołanie ajax:

$(document).ready(function() { 
     $.ajax({ 
      crossDomain: true, 
      type:"GET", 
      contentType: "application/json; charset=utf-8", 
      async:false, 
      url: "<your middle man service url here>/GetQuote?callback=?", 
      data: { symbol: 'ctsh' }, 
      dataType: "jsonp",     
      jsonpCallback: 'fnsuccesscallback' 
     }); 
    }); 

usługa (ASMX), który powróci jsonp:

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public void GetQuote(String symbol,string callback) 
    {   

     WebProxy myProxy = new WebProxy("<proxy url here>", true); 

     myProxy.Credentials = new System.Net.NetworkCredential("username", "password", "domain"); 
     StockQuoteProxy.StockQuote SQ = new StockQuoteProxy.StockQuote(); 
     SQ.Proxy = myProxy; 
     String result = SQ.GetQuote(symbol); 
     StringBuilder sb = new StringBuilder(); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     sb.Append(callback + "("); 
     sb.Append(js.Serialize(result)); 
     sb.Append(");"); 
     Context.Response.Clear(); 
     Context.Response.ContentType = "application/json"; 
     Context.Response.Write(sb.ToString()); 
     Context.Response.End();   
    } 
+0

'async: false' nigdy, nigdy, nigdy tego nie rób – Liam

-1

W mojej pracy mamy nasze spokojny usługi na inny numer portu a dane znajdują się w db2 na parze AS400. Zwykle używamy metody AJAX $.getJSON, ponieważ łatwo zwraca ona JSONP przy użyciu ?callback=? bez żadnych problemów z CORS.

data ='USER=<?echo trim($USER)?>' + 
     '&QRYTYPE=' + $("input[name=QRYTYPE]:checked").val(); 

     //Call the REST program/method returns: JSONP 
     $.getJSON("http://www.stackoverflow.com/rest/resttest?callback=?",data) 
     .done(function(json) {   

       // loading... 
       if ($.trim(json.ERROR) != '') { 
        $("#error-msg").text(message).show(); 
       } 
       else{ 
        $(".error").hide(); 
        $("#jsonp").text(json.whatever); 

       } 

     }) 
     .fail(function(jqXHR, textStatus, error) { 
     var err = textStatus + ", " + error; 
     alert('Unable to Connect to Server.\n Try again Later.\n Request Failed: ' + err); 
     });  
Powiązane problemy