3 回答

TA貢獻1773條經驗 獲得超3個贊
如果要使用post方法發(fā)送表單,serialize()并不是一個好主意。例如,如果您想通過ajax傳遞文件,它將無法正常工作。
假設我們有一個ID為“ myform”的表單。
更好的解決方案是制作一個FormData并將其發(fā)送:
var myform = document.getElementById("myform");
var fd = new FormData(myform );
$.ajax({
url: "example.php",
data: fd,
cache: false,
processData: false,
contentType: false,
type: 'POST',
success: function (dataofconfirm) {
// do something with the result
}
});

TA貢獻1802條經驗 獲得超5個贊
通常serialize()在form元素上使用。
請注意,多個<select>選項在同一鍵下序列化,例如
<select id="foo" name="foo" multiple="multiple">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
將導致一個查詢字符串,其中包含多次出現(xiàn)相同的查詢參數(shù):
[path]?foo=1&foo=2&foo=3&someotherparams...
這可能不是您在后端中想要的。
我使用此JS代碼將多個參數(shù)簡化為以逗號分隔的單個鍵(在John Resig所在的線程中從評論者的響應中無恥地復制):
function compress(data) {
data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g, "$1$2,$4$3");
return /([^&=]+=).*?&\1/.test(data) ? compress(data) : data;
}
上面的內容變成了:
[path]?foo=1,2,3&someotherparams...
在您的JS代碼中,您可以這樣稱呼它:
var inputs = compress($("#your-form").serialize());
希望能有所幫助。
- 3 回答
- 0 關注
- 592 瀏覽
添加回答
舉報