developmentでうまく動作するコードがいくつかあります。
オリジナルコード
respond_to :json
def index
@tags = current_user.tags
respond_with(@tags.map{|tag| {:id => tag.id, :name => tag.name} })
end
のルートファイルで
get "tags/index"
私のjQueryファイルには次のような行があります
$.getJSON('http://localhost:3000/tags.json', function(data) {
ただし、それを本番環境にプッシュすると 、エラー XmlHttpRequest エラーが発生します: Origin is not allowed by Access-Control-Allow-Origin. いくつかの調査を行った後
コードをこれに変更しました
新しいコード
def index
@tags = current_user.tags
respond_to do |format|
if params[:callback]
format.json { render :json => @tags.map{|tag| {:id => tag.id, :name => tag.name} }.to_json , :callback => params[:callback]}
else
format.json { render :json => @tags.map{|tag| {:id => tag.id, :name => tag.name} }}
end
end
end
と
$.getJSON('http://localhost:3000/tags.json' + '&callback=?', function(data) {
同じルートで。
ここで何が起こっているのですか?まだ同じエラーが発生します。コールバックで修正されなかったのはなぜですか?
すべての jQuery コード
var items = [];
var prepopulate = [];
$(function () {
var myVarsJSON = $("#my_vars_json").html(),
myVars = $.parseJSON(myVarsJSON);
$.each(myVars, function(i, obj) {
return prepopulate.push(obj.name);
});
$.getJSON('/tags.json' + '&callback=?', function(data) {
$.each(data, function(i, obj) {
return items.push(obj.name);
});
$("#article_tag_ids_edit").val(prepopulate).select2({
width: "element",
tags: items,
tokenSeparators: [",", " "]
});
});
});
$.getJSON('/tags.json' + '&callback=?', function(data) {
$.each(data, function(i, obj) {
return items.push(obj.name);
});
$("#article_tag_ids").select2({
width: "element",
tags: items,
tokenSeparators: [",", " "]
});
});