【问题标题】:jQuery: Cross-domain POST on RailsjQuery:Rails 上的跨域 POST
【发布时间】:2014-01-19 22:38:36
【问题描述】:

我正在尝试使用以下代码向另一个域发出发布请求

  $.ajax({
    url: "http://domainName.com/api/v1/statistics/1",
    crossDomain: true,
    type: 'POST',
    dataType: 'jsonp'
  });

但它给了我错误(404),似乎无论如何它都将请求视为获取请求

【问题讨论】:

  • 404 page not found.I think URl is wrong .
  • 该请求是一个 GET,因为您告诉 jquery 您有兴趣发出 JSONP 请求。这是您的 dataType 选项中的错字吗?

标签: jquery ruby-on-rails cross-domain


【解决方案1】:

您不能通过 JSONP 发布。您只能使用 GET。

域名还应包含:http:// 以访问外部文档。我希望你知道你必须创建一个使用 JSONP 的函数。默认回调函数称为callback,因此您的响应应该类似于:

callback({ "data" : "data"});

回调函数?callback=? 将自动添加到 URL。如果你有重写,你必须使用$_GET['callback'] 来获取回调函数。

来自 jQuery docs:

“jsonp”:使用 JSONP 加载到 JSON 块中。添加一个额外的 “?回调=?”到 URL 的末尾以指定回调。禁用 通过将查询字符串参数“_=[TIMESTAMP]”附加到 URL,除非缓存选项设置为 true。

编辑

您的请求将类似于:

$.ajax({
    url: "http://domainName.com/api/v1/statistics/1",
    crossDomain: true,
    dataType: 'jsonp',
    jsonp : "mycallback",
    success : function(data){
        console.log(data.thiskey); // Will log OK
    }
});

现在 API 的请求 URL 将如下所示(jQuery 将附加 ?callback=mycallback):

http://domainName.com/api/v1/statistics/1?callback=mycallback

在您的响应中,您必须创建一个函数调用,以便它调用 jQuery Ajax 函数。这个结果需要看起来像这样:

mycallback({ thiskey : "OK" }); // The data in this call can be retreived at the success function

在成功函数中,您可以检索您的数据,例如:

success : function(data){
    console.log(data.thiskey); // Will log OK
}

【讨论】:

  • 你能解释更多..我应该把这个回调放在哪里..我当然使用http://,但我不知道我应该如何应用你的答案:)
【解决方案2】:

CORS

进一步了解 Niels 的回答,您必须意识到跨域数据发送取决于“目标”域的 CORS policy

基本上,“外部”ajax 请求默认被服务器的中间件拒绝,除非您使用某种 CORS 中间件来创建一些端点来访问

如果您解决了 404 错误,您应该考虑使用类似 Rack-CORS 的方式为您的应用提供跨域源支持(允许跨域异步数据传输)

【讨论】:

    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 2013-10-21
    • 2011-07-26
    • 2013-03-02
    • 2013-02-22
    • 2011-08-21
    • 2012-04-15
    • 2021-12-01
    相关资源
    最近更新 更多