jQueryAjaxを介してフォームの本文にエラーメッセージが表示されるポップアップサインインフォームがあります。ローカル環境(PostGresQL、WEBbrick)では正常に動作しますが、Herokuでは動作しません。Herokuでは、ユーザーはエラーメッセージのみを表示する新しいページにリダイレクトされます。つまり、{"error": "Invalid Email Address:testing@test.com"}
ページには実際には2つのサインアップフォームがあります。1つはjQueryダイアログを介してポップアップし、もう1つはページに埋め込まれています。助けてくれてありがとう。
コントローラは次のとおりです。classMailingListController<ApplicationController
respond_to :json
def create
gb = Gibbon.new(Settings.mailchimp.api_key)
res = gb.list_subscribe({:id => Settings.mailchimp.list_id, :email_address => params[:email]})
if res == true
render(:json => {:body => "okay"})
else
render(:json => {:error => res["error"]})
end
rescue
render(:json => {:error => "Fatal Error"})
end
end
これがjsです(コードが重複しているので、動作させようとしています):
// Mailing List Watcher
var mailingList2 = $("#mailing-list2");
if ( mailingList2.length ) {
mailingList2
.live("completed", function(e){
})
.live("success", function(e){
var that = this;
$.cookie("mailingListSubmitted", "true", {expires: 7});
if(mailingList2.find("#mailing-list2 #status2").length == 0){
mailingList2
.find("form input[type='text']")
.after($("<div></div>").attr({id : "status2"}))
}
mailingList2
.find("form input[type='text']")
.attr("disabled", true)
.fadeOut(5000);
$("#mailing-list2 #status2")
.text("Email submitted successfully!")
.effect("highlight", { }, 1000);
})
.live("failure", function(e, error){
if(mailingList2.find("#mailing-list2 #status2").length == 0){
mailingList2
.find("form input[type='text']")
.after($("<div></div>").attr({id : "status2"}))
}
$("#mailing-list2 #status2")
.text(error)
.effect("highlight", {}, 1000);
})
.live("submittal", function(e, emailAddress){
if ( emailAddress == "" || emailAddress == null ) {
$(this).trigger("failure", ["You need to specify an email address!"])
return false;
}
var token = $.token();
$.post("/mailing_list", {email: emailAddress, authenticity_token: token}, function(response, status, xhr){
if(response.error){
$(mailingList2).trigger("failure", ["An error occurred: " + response.error]);
} else {
$(mailingList2).trigger("success");
}
}, "json")
.error(function(){
$(mailingList2).trigger("failure", ["An error occurred. Please try again in a few minutes."]);
});
});
mailingList2.find("form").submit(function(){
emailAddress = mailingList2.find("input[name='email']").val();
$(mailingList2).trigger("submittal", [emailAddress]);
return false;
});
var mlSetting = $.cookie("mailingListSubmitted");
if ( mlSetting == "true" ) {
mailingList2.remove();
}
}
// Mailing List Watcher
var mailingList = $("#mailing-list");
if ( mailingList.length ) {
mailingList
.live("completed", function(e){
})
.live("success", function(e){
var that = this;
$.cookie("mailingListSubmitted", "true", {expires: 7});
if(mailingList.find("#status").length == 0){
mailingList
.find("form input[type='text']")
.after($("<div></div>").attr({id : "status"}))
}
mailingList
.find("form input[type='text']")
.attr("disabled", true)
.fadeOut(5000);
$("#status")
.text("Email submitted successfully!")
.effect("highlight", { }, 1000);
})
.live("failure", function(e, error){
if(mailingList.find("#status").length == 0){
mailingList
.find("form input[type='text']")
.after($("<div></div>").attr({id : "status"}))
}
$("#status")
.text(error)
.effect("highlight", {}, 1000);
})
.live("submittal", function(e, emailAddress){
if ( emailAddress == "" || emailAddress == null ) {
$(this).trigger("failure", ["You need to specify an email address!"])
return false;
}
var token = $.token();
$.post("/mailing_list", {email: emailAddress, authenticity_token: token}, function(response, status, xhr){
if(response.error){
$(mailingList).trigger("failure", ["An error occurred: " + response.error]);
} else {
$(mailingList).trigger("success");
}
}, "json")
.error(function(){
$(mailingList).trigger("failure", ["An error occurred. Please try again in a few minutes."]);
});
});
mailingList.find("form").submit(function(){
emailAddress = mailingList.find("input[name='email']").val();
$(mailingList).trigger("submittal", [emailAddress]);
return false;
});
var mlSetting = $.cookie("mailingListSubmitted");
if ( mlSetting == "true" ) {
mailingList.remove();
}
}