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

Hel*_*rld 2 javascript ajax jquery 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)

  });
Run Code Online (Sandbox Code Playgroud)

编辑:为清楚起见,有两个rails应用程序涉及localhost:3000另一个在localhost:3001

第二次编辑:这是localhost的json响应:3001当我用浏览器点击它时(比如firefox)https://gist.github.com/willfults/7665299

Mac*_*Mac 5

该同源策略阻止JavaScript脚本的从HTTP请求到不同的域.出于SOP的目的,具有相同主机名但具有不同端口的URL(如此处的情况)仍被视为不同的域,因此不允许请求.

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

要解决此问题,您需要在服务上实现跨源资源共享localhost:3001.简而言之,这需要Access-Control-Allow-Origin在响应中添加标题,列出允许向服务发出跨域请求的域.也就是说,在这种情况下Access-Control-Allow-Origin: localhost:3000,为localhost:3001服务的响应添加标题应该允许事情按预期工作.

顺便说一下,这就是浏览器发出请求但是丢弃结果的原因:它需要从服务器请求标头以确定是否允许JavaScript发出请求(即它需要检查是否有Access-Control-Allow-Origin标头)响应).为什么HEAD要求不够,我不知道.

另一种方法是使用JSONP.这在服务器端实现起来可能更简单,但缺点是只能处理GET请求,并且需要在客户端进行稍微复杂的编码.

  • @HelloWorld如果您只需要执行GET请求,实现jsonp可能是最简单的解决方案. (2认同)