【发布时间】:2013-09-16 13:45:39
【问题描述】:
当用户单击某些按钮并提交某些表单时,我需要向用户请求其他凭据。
我尝试这样做的方式是:
- 拦截提交事件,中止它,并存储一个副本
- 通过提示对话框询问凭据(不是 JS 原生的,所以这都是非阻塞的)
- 如果用户输入凭据,则将字段插入事件数据并将其发送到服务器。
我当前的 AJAX 请求代码是:
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
if (ajaxOptions.type === "POST") {
$.current_request = jqXHR;
jqXHR.abort();
$.check_password_with_my_dialog();
}
});
$.check_password_with_my_dialog: function() {
$("#validate-password-prompt").dialog({
modal: true,
title: "input pw",
buttons: {
Ok: function() {
$.password = $("#validate-password-prompt input").val();
$.deliver_current_request();
return $(this).dialog("close");
},
Cancel: function() {
return $(this).dialog("close");
}
}
});
}
deliver_current_request: function() {
$.current_request.beforeSend = function(jqXHR, ajaxOptions) {
ajaxOptions.data = ajaxOptions.data.concat("&password=" + $.password);
};
$.ajax($.current_request);
}
到目前为止的问题是ajaxOptions.data 未定义,所以我无法添加我的数据。
并且请求似乎是作为 GET 而不是 POST。
我这样做是正确的,还是正确的方式?
【问题讨论】:
-
一种方法是,用户提交表单时,在实际提交表单之前,先使用modal获取密码。如果他输入密码,则将密码附加到序列化的表单数据中,并通过 ajax post 提交表单。否则,如果他取消密码模型,则只需退出或将序列化数据保存在本地内存中并进一步使用。
标签: javascript jquery ruby-on-rails ajax forms