我正在使用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'); }
});
奇怪的是,请求后会显示“成功”,并且服务器确实收到了数据,但随后错误消息显示在控制台中。有没有办法避免这个消息?
答案 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的回应。