私の最初のAJAX + Rails 3マイクロアプリに問題があります。私はjQueryを使って完全に無知だので、私はここで Rails 3 AJAX(JQuery)のポストが成功した保存に正しく応答するようにするにはどうすればよいですか?
はコントローラここdef create
@prospect = Prospect.new(params[:prospect])
if @prospect.save
logger.info "seems to save"
else
logger.info "does not save"
end
@prospects = Prospect.all
end
の方法は、ログ
Started POST "/prospects" for 127.0.0.1 at 2011-02-03 11:29:29 -0500
Processing by ProspectsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"qzHvz5uBbmF8JIns1YAt4HlXyb34LWxbsIzZprnMeXM=", "email"=>"[email protected]", "body"=>"here you go: ford.ca, america.com\n"}
does not save
Prospect Load (0.7ms) SELECT "prospects".* FROM "prospects"
Rendered prospects/create.js.erb (0.4ms)
Completed 200 OK in 93ms (Views: 23.7ms | ActiveRecord: 0.7ms)
からの出力がされているなど、約10年でJSをコーディングしていません
2つの事柄に注意してください。 1.ログに "保存しません"が出力されます 2. create.js.erbがレンダリングされます。
最初の問題は、「保存しない」と記録しても、実際には保存されないということです。私は別のページでこの情報を引き出すことができます。
第二の問題は、create.js.erbはそれだけで次のように持っているということです。
$(alert('in create');)
このアラートは発生しません。
私は自分のフォーム、私のAJAXリクエスト、または私のcreate.js.erbで何か間違っている必要があります。
<%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %>
<%= f.label :email, "Your email (we'll be good)" %>
<%= f.text_field :email, :name => "email" %>
<%= f.label :body, "Your comment" %>
<%= f.text_area :body, :name => "body" %>
<%= image_submit_tag("signup.png", :id => "image_submit_button") %>
<% end %>
そして、私のJSは、次のとおりです:私のフォームは、私は警告を取得しない
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
},
cache: false
});
$(function() {
$('#image_submit_button').click(function(){
alert('yarrrrrrr');
$.ajax({
data:
{ prospect: {email: $("#prospect_email").val(), body: $("#prospect_body").val()} },
url: '/prospects',
type: 'POST',
dataType: 'json',
success: function(response)
{
// $('div-you-want-to-replace').replaceWith('<div>Holy shit dude, you are teh awesome</div>');
alert('it works captian');
},
error: function(xhr, ajaxOptions, thrownError) {
alert('noooo');
}
});
});
});
注意が私のAJAX POSTから "それはキャプテンの作品"、私は "nooooo" を取得します。だから私は明らかに間違ったことをしている。
だから、3つの質問:
- 私は私のコントローラは@prospectを節約することを実現するために何をすべきか?
- create.js.erbを実行するにはどうすればよいですか? (私はこれがライトボックスを持っていて、彼らのコメントの見込み客に感謝しているはずだと思う)
- ポストが成功したときにAJAXコードがエラーアラートを実行しないようにするにはどうすればよいですか?
<%= form_for(Prospect.create, :name => "pros", :remote => true) do |f| %>
はすでにProspect.createによる見通しを保存している: