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

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

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

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: "/GetQuote?callback=?", data: { symbol: 'ctsh' }, dataType: "jsonp", jsonpCallback: 'fnsuccesscallback' }); }); 

service(asmx)将返回jsonp:

 [WebMethod] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public void GetQuote(String symbol,string callback) { WebProxy myProxy = new WebProxy("", 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(); } 

在我的工作中,我们在不同的端口号上提供我们的restful服务,数据驻留在一对AS400上的db2中。 我们通常使用$.getJSON AJAX方法,因为它使用?callback=?轻松返回JSONP ?callback=? 没有任何CORS问题。

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