2017-03-04 53 views
0

我寫了下面的代碼來處理表單提交在JQuery中表單提交 - 爲什麼提供動作參數使用事件處理

$('#registration-form').on('submit',function(e){ 
    e.preventDefault(); 
    var details = $('#registration-form').serialise(); 
    $.post('/newreg',details,function(data){}); 
}); 

我注意到,上面的代碼工作,如果我聲明HTML格式如下當形成:

<form id="registration-form" action="/newreg" method="post"> 

但是,如果我沒有在形式上標籤提供的動作和方法不起作用

<form id="registration-form"> 

我沒有在JQuery中提到過表單的事件處理程序,操作和方法嗎?在HTML表單標籤中再次提到相同的東西不是多餘的嗎?

+1

注意:HTML4規範要求您設置動作屬性(對任何事物,但設置) – mehulmpt

+0

我注意到在我的代碼中,serialize的拼寫不正確。它應該是序列化,而不是序列化 –

回答

0

我不是已經在JQuery中提到的窗體的事件處理程序,動作和方法本Ajax請求的代碼?

你有,但你可以用JavaScript閱讀它們,並有一個更通用的功能。

$.ajax({ 
    url: this.action, 
    method: this.method, 
    data: $(this).serialize() 
}).done(function (data, textStatus, jqXHR) { }); 

是不是多餘的HTML表單標籤再次提起同樣的事情?

是的,但這並不一定是壞事。

參見the dictionary

工程不是嚴格必需的(的組件)以發揮功能,但包括在另一組件故障的情況下。

如果你正在編寫高質量,健壯的代碼,那麼在系統中有冗餘是可取的。 Javascript does fail所以用unobtrusive的方式編寫它是最佳實踐。

(這裏的重要部分是表單被正確連接,而不是JS中重複的值。請參閱答案的頂部以瞭解如何避免重複)。

+0

謝謝。如果我想以JSON格式發送數據,我該怎麼辦?這個可以嗎? 'var details = JSON.stringify($('#registration-form')。serialize());'我正面臨其他一些問題,所以無法真正測試JSON.stringify是否可以在這個時候工作。 –

+0

「如果我想以JSON格式發送數據,我該怎麼辦?「 - 獲得口語:停止這樣做*在大多數情況下,JSON不會帶來任何好處,需要更多的工作,並且(由於HTML表單無法在沒有JS的情況下生成JSON)使得代碼的寫入變得更加困難(因爲您需要解析數據以兩種不同的方式在服務器上) – Quentin

+0

「這是行嗎? 'var details = JSON.stringify($('#registration-form')。serialize());'「 - 從技術上講,它將發送JSON,它將使用標準格式編碼對數據進行編碼,作爲JSON,這可能不是你想要的,如何將一個表單中的所有數據收集並表達爲JSON是另一個問題 – Quentin

-1

你可以嘗試出動作或方法聲明

$('#registration-form').on('submit',function(e){ 
    e.preventDefault(); 
    var details = $('#registration-form').serialise(); 
    $.ajax({ 
    url : '/newreg', 
    data : details, 
    type : 'post', 
    function : success(data){ 
     console.log(data); 
    }, 
    function : error(data){ 
     console.log(data); 
    } 
    }); 

    }); 
+0

如果OP的代碼不起作用,爲什麼會這樣?他們的原始代碼有什麼問題? – nnnnnn

+0

@nnnnnn OP的代碼沒有在$ .post請求中定義url和方法 –

+0

是的,它是'$ .post()'的第一個參數,'$ .post()'函數本身顯然會設置'POST'的方法... – nnnnnn