2017-01-17 50 views
-1

我意識到Ajax是提交沒有頁面刷新的表單的公認方式,但要做到這一點,需要循環遍歷每個字段並構建提交的Post字符串。提交沒有頁面刷新的表格

是否沒有其他替代方式使用瀏覽器內置功能來提交表單,但攔截返回的HTML以停止頁面被刷新?

編輯: 不一樣的建議重複該詢問表單驗證:「我想運行JavaScript的用戶驗證」

EDIT2: 的主要問題是如何阻止服務器響應提交從導航到新頁面。有什麼服務器可以響應,這將停止整個頁面刷新?

編輯3: 如何返回http 204響應: 服務器已收到請求,但沒有要發回的信息,並且客戶端應保持在同一文檔視圖中。這主要是爲了允許腳本輸入而不同時

+1

可能重複[HTML表單操作和onsubmit問題](http://stackoverflow.com/questions/16262797/html-form-action-and-onsubmit-issues) –

回答

1

是的,有...的想法是讓表單的動作和onsubmit事件辦理了

考慮下面的代碼更改文檔:

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post"> 
Name: <input type="text" name="fname"> 
<input type="submit" value="Submit"> 
</form> 

function validateForm() { 
    var x = document.forms["myForm"]["fname"].value; 
    if (x == "") { 
     alert("Name must be filled out"); 
     return false; 
    } 

} 

此時您正在攔截呼叫以確保表單有效。如果一切都通過,則頁面刷新將觸發。如果你想刷新不發生,你需要通過Ajax處理帖子,你需要重建整個通話。希望這將幫助你..歡呼

一個簡單的方法來做到這一點,如果你正在使用jQuery是使用 http://api.jquery.com/serialize/功能

一個辦法做到這一點是如果你使用jQuery的序列化數據:

<form id="myForm" name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post"> 


function validateForm() { 
    var x = document.forms["myForm"]["fname"].value; 
    if (x == "") { 
     alert("Name must be filled out"); 
     return false; 
    } 

    var url = $('#myForm').attr('action'); 
    var data = $('#myForm').serialize(); 
    $.post(url, data); 
}