2013-11-26 53 views
3

我有這樣的表格。jQuery`submit`方法忽略POST使用GET發送。爲什麼?

<form id="hiddenForm" method="post" action="/my-controller/my-action/" enctype="multipart/form-data"> 
    <input type="hidden" id="HiddenFormInput" name="HiddenFormInput"> 
</form> 

這是由網頁通過https://[my-server]/my-controller/my-action/訪問,這也是行動的形式點產生。

在服務器端,我區分了GETPOST請求。頁面顯示爲明顯(GET),或者根據表單的值顯示一些結果(POST)。

當我使用jQuery提交表單(我不使用AJAX在這裏,只需提交表單),在這個片段中,

$("#hiddenForm").submit(); 

然後jQuery的似乎提交這份表格GET,雖然它的明確標記爲POST。即使是alert($("#hiddenForm").attr("method"));總是會產生"post"。但是,僅當頁面已由GET加載時纔會發生此不想要的行爲。如果頁面出現POST,即該表單已被提交至少一次,則所有內容均按預期工作。

更新

的問題是一個普通的老preventDefault()之一。觸發提交的按鈕具有自己的功能。這是一個超鏈接。所以我有這一連串的行動。

  1. 超鏈接到https://[my-server]/my-controller/my-action/#
  2. 提交表單用行動https://[my-server]/my-controller/my-action/

當然,這將導致GET調用沒有提交表單。一旦我在頁面https://[my-server]/my-controller/my-action/#超鏈接失去了它的功能。這就是爲什麼第二次嘗試總是起作用的原因,因爲連鎖行動被縮減爲提交表格。

  1. 超鏈接到 https://[my-server]/my-controller/my-action/# (因爲已經有任何效果)
  2. 提交表單用行動https://[my-server]/my-controller/my-action/

然後它的工作當然。

+0

'document.getElementById(「hiddenForm」)。submit();'做什麼? – epascarello

+1

你怎麼知道這個頁面是用'GET'方法提交的? –

+0

是否嘗試在表單中添加''元素? –

回答

0

正如在評論中討論,有沒有漏洞,至少在jQuery的2.0.3的最新版本,可以用這個測試:

<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    $('#dosubmit').on('click',function(){ 
    $("#hiddenForm").submit(); 
    }); 
}); 
</script> 
</head> 
<body> 

<?php 
// 
if(count($_GET) > 0) { 
    echo "<textarea style=\"width: 700px; height: 90px;\"> 
Submitted with method=GET: \$_GET: 
"; 
    var_dump($_GET); 
    echo "</textarea>"; 
} 

if(count($_POST) > 0) { 
echo "<textarea style=\"width: 700px; height: 90px;\"> 
Submitted with method=POST: \$_POST: 
"; 
    var_dump($_POST); 
    echo "</textarea>"; 
} 
?> 

<form id="hiddenForm" method="post" enctype="multipart/form-data"> 
    <input type="hidden" id="HiddenFormInput" name="HiddenFormInput" /> 
</form> 

<div id="dosubmit" style="background-color: gold; width: 200px; cursor: pointer;">Click me to Do jQuery Submit</div> 

</body> 
</html> 

當一個點擊金色背景的文本,$(」 #hiddenForm「)提交()。用於提交表單。

這裏是輸出:

Submitted with method=POST: $_POST: 
array(1) { 
    ["HiddenFormInput"]=> 
    string(0) "" 
} 

在你原來的形式,沒有任何URL參數被提交通過,作爲指定用name屬性只輸入提交。因此,我爲您的隱藏輸入添加了屬性名稱=「HiddenFormInput」。

相關問題