1

我正在使用 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'); }
        });

奇怪的是,请求后出现“成功”,服务器确实收到了数据,但随后控制台中出现了错误消息。有什么办法可以避免这个消息?

4

3 回答 3

4

感谢您在上面的所有回答,但我想我已经找到了方法,在我解决这个问题之前,我尝试使用两种方法,在 ASP.Net MVC 中设置 Access-Control-Allow-Origin - 最简单的方法 ,获得 87 票和32票,我在两个不同的地方找到了答案,并且都应用了它们,但是没有用。本周早些时候,我试图删除 web.config 中的代码,然后将代码留在 C# 中,它可以工作!不敢相信这两种解决方案有冲突。

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

于 2013-10-10T01:42:56.017 回答
0

如果情况是

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

  • 或子域

  • 或尝试用另一个端口点击 url

这是跨域请求。jquery 无法完成跨域请求。

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

尝试使用jsonp来做到这一点。

对于 jsonp,每个调用都有一个回调,这意味着 url 中会有一个值,你必须在 php 中用这个回调发送响应

意味着试试这个: -

$.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 中得到响应。

于 2013-09-25T09:46:25.120 回答
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
于 2013-09-25T09:43:05.900 回答