当打开MVC局部视图以填充下拉列表时,我正在进行AJAX调用。这种联系是我们的一个承包商(我打电话给他们,他们正在努力帮助)。这是电话:
$.ajax({
async: true,
crossDomain: true,
url: "https://contactor/integration_beta/reports?request=getStandardList",
type: 'POST',
headers: {
"authorization": "Basic MzY0MTVlYTktNDJjZC00ZGI1LTg1OWItNjFiODM1MzEwNzY1OjY1MDhkM2U4LTlmYTItNGE2Ny05NmYwLTgwZTgxMGY5NWNjNQ==",
"Access-Control-Allow-Origin": "*",
"content-type": "application/json"
},
processData:false,
data: { version : 1.0 },// "{\n \"version\": \"1.0\"\n}",
error: function (XMLHttpRequest, textStatus, errorThrown) {
var err = errorThrown;
alert('error, ' + errorThrown);
},
success: function (data) {
var d = data;
alert('success, ' + data);
$("#txtReportStatus").val(data);
}
});
问题在于我得到了200回复:
但控制台显示错误:
有没有人知道我在这里做错了什么?
答案 0 :(得分:1)
必须在接收请求的服务器上设置跨源策略,而不是制作它的人(即您的应用程序)。错误告诉您承包商的服务器不允许来自localhost的请求,这可能是它必须保留的方式。否则,任何人都可以创建一个可以远程访问API的本地网站。
出于开发目的,您需要找到另一种方法来规避CORS保护。由于CORS实际上是由浏览器强制客户端来保护您,因此您可以在不涉及第三方的情况下禁用此保护。对于Chrome,您可以使用Allow-Control-Allow-Origin: *之类的扩展程序。通常还有一个配置选项来启动浏览器而不使用CORS进行测试。在Chrome中,您还可以在启动Chrome时使用--disable-web-security
命令行标记。 确保只在开发时执行此操作,因为您正在禁用浏览器安全性,如果您只是浏览网页,最终可能会自行妥协。因此,扩展可能会更好。
至于其他浏览器,我确信有类似的功能,但我使用Chrome进行开发,所以我没有其他任何细节。