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