web-dev-qa-db-fra.com

jquery.ajax Access-Control-Allow-Origin

Voici donc mon appel:

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

Mon URL est légitime. Vous remarquerez que je n'ai pas de jeu de données. Je ne sais pas si le type de données fonctionne correctement car son xml est effectivement renvoyé, mais j'ai essayé cela aussi. C'est un appel à l'api de sportsdata. Sur le site, ils vous montrent un en-tête de demande de x-origin-ip, j'ai donc essayé où access-control-allow-Origin est.

Tout cela renvoyait toujours l'erreur contrôle d'accès. Je ne sais pas exactement ce que sont les données si je les ai définies, donc je les ai omises pour l'instant. J'ai essayé quelques choses différentes que j'ai googlé, je comprends pourquoi j'obtiens l'erreur. Je ne sais pas comment le réparer. J'ai essayé de ne pas avoir à demander, mais si quelqu'un pouvait m'expliquer ou me montrer le chemin, ce serait grandement apprécié

12
dwarf

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

reportez-vous au lien ci-dessus pour plus de détails sur le partage de ressources entre domaines.

vous pouvez essayer d'utiliser [~ # ~] jsonp [~ # ~] . Si l'API ne prend pas en charge jsonp, vous devez créer un service qui agit comme un intermédiaire entre l'API et votre client. Dans mon cas, j'ai créé un service asmx.

exemple ci-dessous:

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

service (asmx) qui renverra 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();         
    }
8
Saranya