12

だからここに私の電話があります:

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

私のURLは合法です。データセットがないことに気付くでしょう。実際にxmlが返されているため、データ型が適切に機能しているかどうかはわかりませんが、それも試しました。それは sportsdata の API への呼び出しです。サイトでは、x-originating-ip のリクエスト ヘッダーが表示されるので、access-control-allow-origin の場所を試してみました。

これらすべてが依然としてアクセス制御エラーを返しました。設定すると何のデータか分からないので、とりあえず省略。私はグーグルでいくつかの異なることを試しましたが、エラーが発生する理由を理解しています。修正方法がわかりません。私は尋ねる必要がないように努めましたが、誰かが私に道を説明したり示したりできれば、それは大歓迎です.

4

2 に答える 2

8

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

クロスドメイン リソース共有の詳細については、上記のリンクを参照してください。

JSONPを試すことができます。API が jsonp をサポートしていない場合は、API とクライアントの間の仲介者として機能するサービスを作成する必要があります。私の場合、asmx サービスを作成しました。

以下のサンプル:

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

jsonp を返すサービス (asmx):

[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();         
    }
于 2013-10-17T10:42:33.043 に答える