2013-09-16 55 views
0

我需要向用戶請求額外的憑據,當他單擊某些按鈕並提交某些表單時。中止AJAX和表單子表單,保存它們,更改它們並稍後發送

我的方式,我試圖做到這一點是:

  • 攔截提交事件,放棄它,並保存副本
  • 詢問憑據與提示對話框(不是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。

我是以正確的方式做,還是我的方式?

+0

的一種方法是, 當用戶提交表單,第一實際提交表單前使用模式得到密碼。 ,如果他輸入密碼,然後將密碼附加到序列化表單數據並通過ajax post提交表單。 否則,如果他取消密碼模型,那麼只需退出或將序列化的數據保存在本地存儲器中並進一步使用它。 –

回答

1

更新

這裏是一個辦法,我能想到的完成回答你的問題。

<form id="myForm" > 
    <button id="submit-form-btn">Submit</button> 
</form> 
<div id="validate-admin-password-prompt"> 
    <input type="password"/> 
</div> 

在JavaScript中,

function submitForm(pwd) { 
    var formData = $('form#myForm').serialize() + "&password=" + pwd; 
    $.ajax({ 
     type: "POST", 
     url: "http://google.com", 
     data: formData, 
     dataType: "script" 
    }); 
    alert("POSTed: " + formData.toString()); 
} 

function alertDialog() { 
    $("#validate-admin-password-prompt").dialog({ 
    modal: true, 
    title: "Admin password is required", 
    zIndex: 10000, 
    buttons: { 
     Ok: function() { 
     $(this).dialog("close"); 
     var pwd = $("#validate-admin-password-prompt input").val(); 
     submitForm(pwd); 
     }, 
     Cancel: function() { 
     $(this).dialog("close"); 
     alert('Not authorized to submit the form'); 
     return false; 
     } 
    } 
    }); 
} 
$("#submit-form-btn").click(function(e) { 
    e.preventDefault(); 
    $ele = $("#validate-admin-password-prompt input");  
    if ($ele.val()==null || $ele.val().trim()=="") { 
     alertDialog(); 
    } else { 
     submitForm($ele.val()); 
    } 
}); 
+0

它不會工作,因爲打開模式是一種非阻塞操作。 代碼將繼續執行並達到其他情況。 –

+0

我可以知道什麼是非阻塞操作嗎? –

+0

表示代碼將繼續執行,而不是等待打開模式的孔功能; 2-等待用戶輸入; 3驗證用戶輸入; 4-回報。 因此,我不能將密碼注入表單數據,因爲當我獲得密碼時,表單已經提交。 (在你的代碼中,它會達到else條件,因爲pwd會評估爲undefined) –

相關問題