使用AJAX调用另一个域的奇怪响应

时间:2017-07-24 14:35:31

标签: ajax asp.net-mvc

当打开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回复​​:

enter image description here

但控制台显示错误:

enter image description here

有没有人知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

必须在接收请求的服务器上设置跨源策略,而不是制作它的人(即您的应用程序)。错误告诉您承包商的服务器不允许来自localhost的请求,这可能是它必须保留的方式。否则,任何人都可以创建一个可以远程访问API的本地网站。

出于开发目的,您需要找到另一种方法来规避CORS保护。由于CORS实际上是由浏览器强制客户端来保护您,因此您可以在不涉及第三方的情况下禁用此保护。对于Chrome,您可以使用Allow-Control-Allow-Origin: *之类的扩展程序。通常还有一个配置选项来启动浏览器而不使用CORS进行测试。在Chrome中,您还可以在启动Chrome时使用--disable-web-security命令行标记。 确保只在开发时执行此操作,因为您正在禁用浏览器安全性,如果您只是浏览网页,最终可能会自行妥协。因此,扩展可能会更好。

至于其他浏览器,我确信有类似的功能,但我使用Chrome进行开发,所以我没有其他任何细节。