2011-03-25 59 views
11

回到學習HTML時,CGI爲王,與服務器交互的正確方式是將<input>標籤放在<form>標籤內。當用戶按下「提交」按鈕時,將HTTP GET或HTTP POST消息發送到服務器,並使用服務器上CGI程序返回的HTML代碼刷新瀏覽器。使用JavaScript和AJAX,我是否還需要HTML <form>標記,並且是否仍然需要使用「提交」按鈕將表單提交給服務器?

現在我已經開始做網絡的東西,我一直在學習JavaScript和jQuery。由於jQuery可以攔截事件,如clickkeypressfocusout,並且可以使用$.ajax()$.getJSON()讀取數據,是否仍然需要有<form>標記?

如果我想支持JavaScript關閉的用戶,那麼「真正的形式」仍然是必需的嗎?

+1

您應該將JavaScript視爲表示層的「附加」,而不是HTML標準的替代品。是的,您可以使用JavaScript行爲代替DOM行爲。但是,正如可以在45英里每小時的時速裏駕駛90英里每小時一樣,你真的不應該這樣做。有關更多信息,請參閱Unobtrusive JavaScript上的wiki文章:http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – 2011-03-25 19:29:51

+0

如果我可以總結迄今爲止的答案,聽起來像

標記僅在序列化表單中的元素時是必需的。但更深入地思考,聽起來像「單頁」網站(如GMail和Google Maps)和多頁網站(如Amazon.com)之間存在差異。我可以看到爲多頁網站使用表單的價值,但是使用純JavaScript和沒有表單的「單頁」網站可能會更好,但只要提交是通過JavaScript異步完成的,可能不會損害表單的形式。 – 2011-03-25 20:32:31

回答

4

表單仍然可以幫助你,但簡短的答案是否定的,不是真的。

如果您有一組輸入將與某個AJAX請求有關,那麼爲了進行驗證/序列化目的,可能會更容易將它們保留在自己的表單中。例如:

$.ajax({ 
    url: 'ajax/test.html', 
    dataType: 'json', 
    method: 'POST', 
    content: $('form#login_form').serialize(), // <-- Serialize elements only in 
    success: function(data) {     //  the login_form container. 
     $('.result').html(data); 
    } 
}); 

根據您的要求,您可能需要保持在你的表格很好的降解誰擁有關閉JavaScript的用戶。您仍然需要提交表單,因此設置表單並就位是個不錯的主意。

1

如果您使用的是ajax,只要您沒有任何直接發佈或獲取,就不需要表單標籤。不過,它仍然是很好的html設計。

1

你可以同時做,提交或不提交。它可以取決於您想要聽取更改的表單元素。但是你可以做這樣的事情作爲一個例子:

<SELECT NAME="tree" onchange="doSomething(someVar);"> 

但同樣,這取決於你要處理的頁面的哪個元素上。

相關問題