jquery.ajax Access-Control-Allow-Origin

dwa*_*arf 12 javascript xml ajax jquery jsonp

所以这是我的电话:

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

我的网址是合法的.您会注意到我没有数据集.我不确定数据类型是否正常工作,因为它实际上返回了xml,但我也尝试过.它呼吁sportsdata的api.在网站上,他们向您显示x-originating-ip的请求标头,所以我尝试过access-control-allow-origin所在的位置.

所有这些仍然返回了访问控制错误.如果我设置它,我不清楚数据是什么,所以我暂时省略了它.我用谷歌搜索了几个不同的东西,我理解为什么我得到错误.我不知道如何解决它.我试图不必问,但如果有人可以解释或告诉我的方式,那将非常感激

Sar*_*nya 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'
        });
    });
Run Code Online (Sandbox Code Playgroud)

service(asmx)将返回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();         
    }
Run Code Online (Sandbox Code Playgroud)

  • `async:false` 永远、永远、永远不会这样做 (3认同)