2013-11-02 25 views
0

我在我的机器上部署了Apache下的HTML + KnockoutJS + JQuery站点,可访问http://daily/admin.html(或http://localhost/admin.html)。后端是建立在西纳特拉和下rackup运行,这样我就可以在http://localhost:9292/api/items 访问其API的问题是,如果我做一个AJAX的GET请求,我得到:如何在使用JQuery(和Sinatra)POST时避免跨源请求问题

XMLHttpRequest cannot load http://localhost:9292/api/items. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

我的修复是添加以下行到Sinatra应用程序:

headers['Access-Control-Allow-Origin'] = 'http://daily' 

问题是,现在我不能使用Ajax做POST。我收到以下消息:

Cross origin requests are only supported for HTTP. 

是JSONP的一个选项吗?我可以使用JSONP进行POST吗?

+0

错误消息那种混淆了我。您是否使用HTTPS? –

+0

不是,这是相同的原产地政策,我猜 – vicusbass

+0

这是“只为HTTP”,让我困惑。因为,那么还有什么应该支持?当然,它是HTTP,因为浏览器正在说什么...... =>奇怪的错误信息。 –

回答

1

您可以在这种情况下使用JSONP。

通过上面这段代码,我想你错过的东西

headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' 
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS' 
+0

嗯,所以POST应该使用JSONP?我必须尝试一下。另一方面,我必须考虑如何部署它,所以我不会有这个问题。不想使用Sinatra模板.. – vicusbass