Chrome显示访问控制允许来源错误

时间:2013-09-25 09:27:34

标签: javascript jquery google-chrome

我正在使用jquery将数据发布到服务器,服务器收到数据,但chrome仍显示错误:

XMLHttpRequest cannot load `myServer:63373/api/sendData`. Origin `myServer:63385` is not allowed by Access-Control-Allow-Origin. 

这是我的js代码:

 $.ajax({
            type: 'POST',
            url: 'myServer:63373/api/SendData',
            crossdomain: true,
            async: true,
            data: myData,
            dataType: 'json',
            success: function(){ alert('success'); }
        });

奇怪的是,请求后会显示“成功”,并且服务器确实收到了数据,但随后错误消息显示在控制台中。有没有办法避免这个消息?

3 个答案:

答案 0 :(得分:4)

感谢上面的所有答案,但我想我找到了方法,在我解决这个问题之前,我尝试使用两种方法,Setting Access-Control-Allow-Origin in ASP.Net MVC - simplest possible method 以87票和32票,我在两个不同的地方找到答案,并且都应用了它们,但它没有用。本周早些时候,我试图删除web.config中的代码并将代码保留在C#中,它可以正常工作!不敢相信这两种解决方案有冲突。

无论如何,希望这可以帮助别人。

答案 1 :(得分:0)

“Access-Control-Allow-Origin不允许”是原因。简而言之,您通常不能对您的javascript所包含的网页中的域/端口/协议进行XHR调用。

现代浏览器允许您在获得服务器管理员 的许可的情况下解决此

您使用XHR2 API(http://www.html5rocks.com/en/tutorials/cors/

发出Ajax请求

在服务器端,您需要发出以下标头以允许从提供包含您的javascript的网页的域进行访问:

Access-Control-Allow-Origin: http://your-page-domain.com
Access-Control-Allow-Credentials: true

答案 2 :(得分:0)

如果情况

  • 您的脚本托管在另一台服务器上

  • 或子域名

  • 或尝试使用其他端口点击网址

这是跨多米诺的请求。 jquery无法满足跨域请求。

如果这是你的问题,那么你应该使用jsonp这个“jsonp”允许跨域请求。

尝试使用 jsonp

对于jsonp,每个调用都有一个回调意味着url中会有一个值 并且你必须在php

中发送respnse

意味着试试这个: -

$.ajax({
        type: 'POST',
        url: 'myServer:63373/api/SendData',
        crossdomain: true,
        async: true,
        data: myData,
        dataType: 'jsonp',
        success: function(){ alert('success'); }
    });

并在php中

wrap your response in  $_GET['_callback']."(".$response.")"; and echo it

你会得到json的回应。