2013-09-30 21 views
12

Così qui è la mia chiamata:Access-Control-Allow-Origin jquery.ajax

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

mio URL è legittimo. Noterai che non ho set di dati. Non sono sicuro che il tipo di dati funzioni correttamente poiché viene restituito effettivamente xml, ma ho provato anche quello. È una chiamata alla api di sportsdata. Sul sito, ti mostrano un'intestazione di richiesta di x-originario-ip quindi ho provato quello dove è access-control-allow-origin.

Tutto ciò ancora restituito l'errore controllo accessi. Non sono chiaro su quali dati sono se lo imposto, quindi ho omesso per ora. Ho provato alcune cose diverse su Google, capisco perché sto ottenendo l'errore. Non so come aggiustarlo. Ho cercato di non dover chiedere, ma se qualcuno potesse spiegare o mi mostra la via, che sarebbe molto apprezzato

+4

Il server deve impostare l'intestazione del controllo di accesso, non il client. –

+0

beh sto rovinando? perché non è una chiamata al mio computer locale. il server non è locale, ma ho letto che su altri post. perché, se digito il mio URL direttamente nel browser, la chiamata funziona, ma con jquery no? – dwarf

+0

Inoltre, se si dice a jQuery di aspettarsi JSONP, il server deve restituire JSONP, non XML. –

risposta

8

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

riferiscono il link qui sopra per maggiori dettagli sulla Croce la condivisione delle risorse di dominio.

puoi provare a utilizzare JSONP. Se l'API non supporta jsonp, devi creare un servizio che funge da intermediario tra l'API e il tuo cliente. Nel mio caso, ho creato un servizio asmx.

esempio riportato di seguito:

ajax chiamata:

$(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' 
     }); 
    }); 

servizio (ASMX) che restituirà 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' mai, mai, mai farlo – Liam

-1

Al mio lavoro che abbiamo i nostri servizi riposanti su un numero di porta diverso e i dati risiedono in db2 su una coppia di AS400. In genere utilizziamo il metodo AJAX $.getJSON perché restituisce facilmente JSONP utilizzando ?callback=? senza problemi con 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); 
     });  
Problemi correlati