所以这是我的电话:
$.ajax({
url: url,
headers: { 'Access-Control-Allow-Origin': '*' },
crossDomain: true,
success: function () { alert('it works') },
error: function() {alert('it doesnt work')},
datatype: 'jsonp'
});
我的网址是合法的。您会注意到我没有数据集。我不确定数据类型是否正常工作,因为它实际上返回了xml,但我也尝试过。它呼吁sportsdata的api。在网站上,他们会向您显示x-originating-ip的请求标头,所以我尝试过 access-control-allow-origin 。
所有这些仍然返回访问控制错误。如果我设置它,我不清楚数据是什么,所以我暂时省略了它。我用谷歌搜索了几个不同的东西,我理解为什么我得到错误。我不知道如何解决它。我试着不必问,但如果有人能解释或告诉我的方式,那将非常感激
答案 0 :(得分: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'
});
});
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();
}
答案 1 :(得分:-1)
在我的工作中,我们在不同的端口号上提供了restful服务,数据驻留在一对AS400上的db2中。我们通常使用$.getJSON
AJAX方法,因为它可以使用?callback=?
轻松返回JSONP,而不会出现任何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);
});