使用JQuery(和Sinatra)进行POST时如何避免跨源请求问题

时间:2013-11-02 00:27:05

标签: javascript jquery ajax knockout.js sinatra

我在我的机器上的Apache下部署了一个HTML + KnockoutJS + JQuery站点,可在http://daily/admin.html(或http://localhost/admin.html)访问。后端内置于Sinatra并在rackup下运行,因此我可以在http://localhost:9292/api/items访问其API 问题是如果我做一个AJAX GET请求,我得到:

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吗?

1 个答案:

答案 0 :(得分:1)

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

使用上面的代码,我想你错过了什么

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