У меня проблемы с моим самым первым микро-приложением AJAX + Rails 3.Я не кодировал JS около 10 лет, поэтому я совершенно не разбираюсь в 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"=>"zach@zach.zach", "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)
Обратите внимание на две вещи: 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 не выполнял предупреждение об ошибке при успешной публикации?