$ajsx{} 方法的 data 屬性如何編寫?鍵名含點號(如 filter.type)如何處理?
| 寫法 | 語法示例 | 適用場景 | 注意事項 |
|---|---|---|---|
| 對象字面量 | { "filter.type": "xxx", "filter.telphone": "yyy" } | 參數固定、需精確控制鍵名 | 鍵名含特殊字符必須加引號 |
| 表單序列化 | $('#formId').serialize() | 參數與表單字段一致、自動收集 | 需表單 name 屬性匹配後端參數名 |
| FormData 對象 | new FormData(formElement) | 包含文件上傳、二進制數據 | 自動設置 multipart/form-data,不可手動設置 Content-Type |
// ✅ 正確:引號包裹
data: {
"filter.type": "value1",
"user[name]": "value2",
"json-data": "value3"
}
// ❌ 錯誤:裸露特殊字符
data: {
filter.type: "value1" // SyntaxError: Unexpected token '.'
}
const params = {
"filter.type": "advanced",
"filter.keyword": $("#keyword").val(),
"page.pageNum": 1,
"page.pageSize": 20,
"sort.field": "createTime",
"sort.order": "desc"
};
$.ajax({
url: "/api/search",
method: "POST",
data: params, // jQuery 會自動轉為 filter.type=advanced&filter.keyword=...
dataType: "json"
});
const formData = $('#searchForm').serializeArray(); // 數組 [{name, value}, ...]
formData.push({ name: "extra.token", value: getToken() });
formData.push({ name: "extra.timestamp", value: Date.now() });
$.ajax({
url: "/api/submit",
data: formData, // 支援數組格式
...
});
$.ajax({
url: "/api/json",
method: "POST",
contentType: "application/json", // 關鍵:告知後端解析 JSON
data: JSON.stringify({ // 必須手動序列化
filter: { type: "advanced", keyword: "test" },
page: { num: 1, size: 20 }
}),
dataType: "json"
});
data 會拼接到 URL,超過 2KB 可能被截斷,大數據用 POST#id# 語法:MyBatis/早期框架用法,jQuery AJAX 僅支援 #{id} 風格(即標準對象/數組)$.param(obj, true) 開啟傳統模式,a[b][c]=1 編碼為 a%5Bb%5D%5Bc%5D=1,後端需支援解析processData: false, contentType: false + FormData