发布跨域数据在任何地方找不到任何有效答案

时间:2017-05-27 09:03:38

标签: jquery json ajax cross-domain shopify

嘿guyz我是stackoverflow社区的新手。我正面临有关跨域请求的问题。当我从其他域获取数据时,我可以使用jsonp,但jsonp只获取数据,但当我尝试使用json格式的ajax发布数据时,它在控制台中给出了跨域错误。我已经阅读了许多论坛的一些stackoverflow解决方案,但没有任何对我有用。

3 个答案:

答案 0 :(得分:1)

我在Heroku上的一个单独的应用程序上执行此类“API”调用,而不是产品创建只是获取信息。 Sinatra工作正常。

假设您正在使用Ruby / Sinatra,请在您的Heroku / Whatever App上执行类似的操作:

    configure do
     $apikey = ENV['API_KEY']
     $password = ENV['PASSWORD']
     $shopname = ENV['SHOPNAME']
    end

post '/somepath' do
  puts params.inspect
  ShopifyAPI::Base.site = "https://#{$apikey}:#{$password}@#
  {$shopname}.myshopify.com/admin"
  my_variant = ShopifyAPI::Variant.find(variant_id)
  puts my_variant.inspect
  #or whatever you want to do
end

方法是构建您的基本站点,然后发出对各种API的调用,如下所示:

ShopifyAPI::Product.create(:handle => 'foo', :title => 'Foo')

您可能需要更多选项,只需查看JSON文档并尝试将它们映射到Ruby API库。您当然可以使用原始JSON,但是您需要处理shopify_api Ruby gem为您处理的身份验证:

https://github.com/Shopify/shopify_api

希望这有帮助。

你肯定想要避免使用CORS / JSONP,它们会在客户端的防火墙后面失败,也会以各种方式默默地使用安全附加组件。对他们来说非常沮丧。如果您需要通过直接JSON向外部应用程序发送站点内容,嵌入式代理应用程序即可。您需要做的就是创建一个嵌入式应用程序,使用Rails Gem非常容易,而对于Sinatra来说也不是太难,Shopify网站上也有示例代码,并使其成为代理。

这意味着当您的网站提交到mystore.shopify.com/apps/some-path/some-otherpath时,它会将代理传递到myapp.heroku.com/some-otherpath或托管您应用的任何位置。

但是,如果您只是需要触摸Shopify来获取产品并将其粘贴到数据库中,或者修改它们,或者通过一些外部应用程序创建它们,上面的代码将为您提供明显的修改。

答案 1 :(得分:0)

浏览器不会发出跨域ajax请求。它受到限制。你必须使用api或jsonp。您的问题已在here处回答。

答案 2 :(得分:0)

你错过了最简单的PUZZLE。在不使用App Proxy的情况下,您不会从Shopify商店向您自己的服务器发出Ajax请求。如果您已在商店中安装了应用程序,则可以使用应用程序代理。使用应用程序代理,您可以安全地POST / GET到您的域的端点,没有CORS或令人震惊的糟糕的JSONP垃圾。

TL:DR;使用App Proxy时,Ajax的所有问题都会消失。