Javascript 如何结合ajax和CORS向另一个域发送json请求

Javascript 如何结合ajax和CORS向另一个域发送json请求,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我一直在尝试从另一个域上托管的Web服务获取信息。起初我只使用ajax,但后来我意识到,出于安全原因,这不起作用。后来我了解到我可以使用CORS来解决这个问题,问题是我无法让它工作。有什么建议吗 javascript: $.ajax({ type: "POST", url: "http://localhost:34887//Login", data: '{"username":"Administrator","password":""}', dataType: "json

我一直在尝试从另一个域上托管的Web服务获取信息。起初我只使用ajax,但后来我意识到,出于安全原因,这不起作用。后来我了解到我可以使用CORS来解决这个问题,问题是我无法让它工作。有什么建议吗

javascript:

$.ajax({
type: "POST",
    url: "http://localhost:34887//Login",
    data: '{"username":"Administrator","password":""}',
    dataType: "json",

    success: function(data) {
        alert(data[1]);
    },
    error: function(data){
        alert("fail");
    }
});
使用CORS的php代码:

header('Access-Control-Allow-Origin: http://localhost:34887/');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
我得到的错误:

无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为500

这与我不使用CORS时遇到的错误相同。
(欢迎使用COR的在线示例)

您可以将*添加到访问控制允许源代码中,以便:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

如果您有两台服务器-
服务器A
(让它成为
http://localhost:5050
)和服务器B(让它成为
http://localhost:34887/
)并且您正试图从一个从
服务器a
运行到
服务器B

Website on Server A ===AjaxRequest==> Server B
然后,
服务器B
应使用
访问控制允许源站
标题响应在
服务器A
上运行的网站的请求,标题中的值为
服务器A

header('Access-Control-Allow-Origin: Server A');
即:

header('Access-Control-Allow-Origin: http://localhost:5050');

此代码应在
服务器B
中运行,以接受来自
服务器A的请求

站点A要调用站点B上的web服务。站点B需要设置这些访问控制头,以允许站点A调用该服务。这就是您在测试中所做的吗?
Access Control Allow Origin
标题列出了您正在调用的端点的原点。它应该列出进行调用的页面的来源。我还不太了解CORS,我有一个网站请求Web服务,该Web服务能够在我的sql server中发布所有数据,现在我正试图从我的localhost:5050访问和编辑此数据,所以我将CORS放在localhost上该网站的php中:5050@T.J.Crowder对的我会用更好的术语更新答案:)@T.J.Crowder,让我知道当前的解释是否更好。谢谢@sansactions:在运行于
localhost:34887
上的代码中,您应该做的是从标题中读取请求的
origin
,决定是否接受该来源,如果接受,则将该来源作为
Access Control Allow origin
标题回显。如果您不想授予访问权限,请根本不要发回任何CORS头。这样,您就不会公布您允许访问的用户。运行在34887上的服务器应该返回
访问控制允许源代码。不管它是否运行php/python/perl或任何其他语言,为了让浏览器(在5050上查看网站)接受来自服务器(在34887上)的响应,您必须返回该标题。如果只是用于测试,我想这是可以的,但是我真的建议您解决该问题(而不是找到解决方法).除非他们想让它向全世界敞开。即使他们真的想(在这个问题上没有任何迹象表明他们会这么做),如果你建议这样做的话,把它标记出来是非常重要的。