Javascript Jquery:$.getJSON具有不同的url端口

Javascript Jquery:$.getJSON具有不同的url端口,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我正在尝试将$.getJSON用于本地应用程序调用其他端口上的另一个本地应用程序。 例如,我的应用程序运行在localhost:3000上,但我想调用$。getJSON调用另一个运行在localhost:3001上的应用程序,在firebug中,它返回红色,响应为200,但响应中没有数据。有办法做到这一点吗?我试过这个 $.getJSON('http://localhost:3001/dashboard/widgets/marketing_efficiency_gauge.json', {

我正在尝试将
$.getJSON
用于本地应用程序调用其他端口上的另一个本地应用程序。 例如,我的应用程序运行在
localhost:3000
上,但我想调用
$。getJSON
调用另一个运行在
localhost:3001
上的应用程序,在firebug中,它返回红色,响应为200,但响应中没有数据。有办法做到这一点吗?我试过这个

 $.getJSON('http://localhost:3001/dashboard/widgets/marketing_efficiency_gauge.json',
 {   key: 'value' }, function(data){

 alert(data)

  });
编辑:为了清楚起见,有两个rails应用程序,一个在localhost:3000上,另一个在localhost:3001上

第二次编辑:这是我用浏览器(比如firefox)点击localhost:3001时的json响应。

防止JavaScript脚本向不同域发出HTTP请求。就SOP而言,具有相同主机名但不同端口的URL(如此处所示)仍被视为不同的域,因此不允许请求

在这种情况下通常会发生的情况是浏览器确实通过网络发出请求,但会丢弃响应并向JavaScript发送错误结果

要解决此问题,您需要在
localhost:3001
服务上实现。简而言之,这需要在响应中添加一个
accesscontrolalloworigin
头,列出允许向服务发出跨域请求的域。也就是说,在这种情况下,将
accesscontrolalloworigin:localhost:3000
头添加到
localhost:3001
服务的响应中,应该可以让事情按预期工作

顺便说一句,这就是浏览器发出请求但放弃结果的原因:它需要从服务器请求标头,以确定是否允许JavaScript发出请求(即,它需要检查响应中是否有
访问控制允许来源
标头)。为什么一个
HEAD
请求是不够的,我不知道


另一种选择是使用。这可能更容易在服务器端实现,但缺点是只处理
GET
请求,并且需要在客户端进行稍微复杂的编码。

您确认相同的URL在浏览器中可以手动工作?是的,它可以手动工作。为什么要编写两次警报(数据)?这是回调中的错误@保罗:那是个打字错误,但那没关系,它只会提醒你,你的问题是由于错误造成的。要修复它,您需要在localhost:3001服务上启用。@HelloWorld如果您只需要执行GET请求,实现jsonp可能是最简单的解决方案。@JasonP:是的,我现在只需要GET请求,正在研究如何执行:)@JasonP:这是另一个很好的选择,我已经添加到了答案中。这很有效,有这么多的选择,如果有人发现了它并且正在使用rails,您可以使用它-