1

基本的に、アイテムが関連付けられたリストを作成するアプリがあります。アクセスした任意の Web サイトからアイテムを作成するブックマークレットを使用してクロスドメイン投稿を受け入れるようにアプリを有効にしようとしています。私はレールとjQueryの両方に慣れていないので、どんな助けでも大歓迎です!

今のところ、ブックマークを初めて押したときに 200 OK が返ってきます。2 回目は、304 エラーが表示されます。ただし、アイテムは作成されません。

items_controller.rb

def create
    @list = current_user.lists.find(params[:list_id])
    @item = Item.create!(params[:item])
    @item.wishes.build(list_id: @list.id)
    if @item.save
        flash[:success] = "Item created!"
        redirect_to @item
    else
        render 'new'
    end
end

ブックマークレット.js

alert('Loaded');

document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>');


(function($)
{

    alert( $('title').text() );

var dataObj = {
    'remote_image_url': "http://developer.android.com/assets/images/dac_logo.png",  
    'title':    $('title').text(),
    'link': "http://omfg.dk",
    'list_id':  5,
    'commit':   "Add wish"
};

$.ajaxSetup({
  type: "POST",
  // contentType: "application/json; charset=utf-8",
    xhrFields: {
    withCredentials: true
    },
  crossDomain: true
});

$.post('http://localhost:3000/items', dataObj, function(data)
{
    //alert('ADDED!!!');
});


}(jQuery));

ブックマーク

javascript:(function()%7Bvar%20script=document.createElement('SCRIPT');script.src='http://localhost:3000/assets/bookmarklet.js';document.body.appendChild(script);%7D)()

さらに、rack/corsgem をインストールして、次のようにセットアップしました。

config.middleware.use Rack::Cors do
   allow do
      origins '*'
      resource '*',
        :headers => :any,
        :methods => [:get, :put, :delete]
   end
end
4

1 に答える 1

0

304 はエラーではなく、リソースがキャッシュされ、変更されていないことを示しています。これを修正するには、いくつかの方法があります。

  1. Web サーバーの実装を変更して、キャッシュせず、常に 200 を返すようにします。
  2. URL の末尾にランダムな文字列を追加して、キャッシュされないようにします。以下に例を示します: jquery を使用してランダムな文字列を生成して追加する方法
于 2013-05-09T17:23:55.117 に答える