我有一个在另一个屏幕顶部打开的模式。 基本屏幕具有使用AJAX过滤该页面上结果的过滤方法。
之后,我在屏幕上过滤结果,然后可以打开模式并在模式中对表单执行操作。 但是,我不想执行重定向/刷新。
在仍然执行提交的同时我该怎么做?
我的模态链接就像:
<%= link_to this_path(user_id: user.id), class:"modal-link", data: {"modal-url" => this_path(user_id: user.id)} do %><span><i class="fa fa-plus"></i><% end %>
模态足够标准:
<div class="modal form-modal">
<div class="modal-container">
<div class="modal-dialog modal-dialog-wide">
<button class="close">×</button>
<div class="modal-content">
<div class="modal-header">
<h2 class="hdg-b">Edit This</h2>
</div>
<div class="modal-body">
<div id="error_explanation"></div>
<%= render 'form', form_path: action_path, form_method: :put, create: false %>
</div>
</div>
</div>
</div>
</div>
AJAX也是:
MyProject.onPageLoad(function() {
var form = $('.edit_site_scope'),
onSubmit = function(event) { //callback handler for form submit
event.preventDefault();
var form = $(this),
url = form.attr("action"), //get form action:
type = form.attr("method"),
data = form.serialize();
var location = window.location.href;
var posting = $.ajax({
type: type,
url: url,
data: data,
dayaType: "json",
success:function(data, textStatus, jqXHR)
{
$('.modal').remove();
window.location = location;
$('#contact-tab-submit').show();
},
error: function(jqXHR, textStatus, errorThrown)
{
$('#error_explanation').html('');
errors = jqXHR.responseJSON;
$.each( errors, function( key, value ) {
$('#error_explanation').append('<div class="alert alert-dismissable" id="alert-message"><i class="fa fa-exclamation-triangle"></i>' + value + '<div class="alert-close">Close</div></div>');
});
$('#contact-tab-submit').show();
}
});
window.setTimeout(function() {
$(".alert").fadeTo(500, 0).slideUp(500, function(){
$(this).remove();
});
}, 5000);
return false; // prevent default when submit button clicked
};
if (form.size() !== 0) {
form.submit(onSubmit);
}
});
这是我对表单提交的控制器操作:
def action_to_be_performed
@this_thing = ThisThing.where(id: params[:id]).first
@this_thing.update(this_things_params)
flash[:success] = "Successfully performed the action."
render json: @this_thing
rescue => error
Rails.logger.error "Exception caught updating this.\nCause: #{error}\n" + error.backtrace.join("\n")
render json: @this_thing.errors.full_messages, status: :bad_request
end
我仍然在模态方面很挣扎,我猜想是用AJAX。 如何执行动作,关闭模式并保持当前页面打开?
我想出了一个简单的解决方案,开车回家。 我的Javascript中的以下行:
window.location = location;
可以更改为:
window.location.reload();