HTTP.call GET方法在客户端上不起作用

时间:2013-11-25 13:54:06

标签: json get meteor

我的代码如下:

var url = "http://www.telize.com/geoip";
HTTP.call("GET", url, function(err, res){
  if (err){
    console.log("HTTP call GET error: "+err);
  } else {
      var respJson = JSON.parse(res.content);
      console.log("HTTP call GET response: "+JSON.stringify(respJson));
  };
});

我在服务器和客户端上运行此代码。 在服务器上没有问题,我得到了JSON格式的信息响应。 在客户端,我有一个错误:“错误:网络”。

如何在客户端获取JSON响应? 怎么了?

此致 DP

3 个答案:

答案 0 :(得分:2)

首先,客户端代码受Same Origin Policy (SOP)的约束。这就是为什么你不能做XHR跨域的原因,除非远程服务器实际上支持Cross-Origin Resource Sharing (CORS)

在传统设置中,您可以使用JSONP或您的服务器作为代理来解决这个问题。

在Meteor上,您只需创建a method on the server即可为您提供请求。这样,它就是代表客户端代码执行请求的服务器。可以同步调用流星HTTP methods,以便您可以执行return

//On the server
Meteor.methods({
  'remoteGet' : function(url,options){
    return HTTP.get(url,options);
  }
});

//On the client
Meteor.call('remoteGet','http://remoteurl.com/',{
  //...options...
},function(error,response){
  //if an error happened, error argument contains the details
  //if the request succeeded, the response will contain the response of the server request
})

答案 1 :(得分:1)

您的问题是same-origin policy:由于安全原因,您无法在客户端执行跨域AJAX请求。

手头有几种解决方案:

  • 使用在您自己的域上运行的代理。
  • JS​​ONP

答案 2 :(得分:0)

您只需要将您的逻辑包装在Meter.methods中。 (见流星文档)。这是进行客户端到服务器呼叫的“流星”方式。