我们在上一个视频中谈到了 GET,但没有对 POST 进行足够多的关注。所以我想在这里做一下。POST 的主要区别在于,您几乎总是需要将数据与请求一起传递。这些数据可以有多种形式,但它可能只是一个您手头的对象。语法也很简单
$.post(
"/data/process.php",
{
name: "Susan",
job: "Writer"
}
function(data, textStatus, jqXHR) {
// success
}
);
请注意第二个参数,它是一个数据对象(本质上是 JSON)。该数据可以是任何东西(包括字符串)。您需要以对您的后端有用的方式传递它。
回到我们上一个视频中的表单示例,如果要传递整个表单中的所有数据怎么办?您也不希望在表单更改时更新 JavaScript。jQuery 通过其 serialize() 方法使这变得容易。只需在表单元素本身调用它即可
$("#my-form").serialize();
这将遍历整个表单,并从表单中的每个命名输入中创建一个查询字符串。然后您可以将其用作在 $.post() 时传递的数据。
$("#my-form").on("submit", function() {
$.post(
"/",
$("#my-form").serialize(),
function(data, textStatus, jqXHR) {
console.log("success");
}
);
});
查看 CodePen 上 Chris Coyier (@chriscoyier) 创建的示例 CtoEg
不太明白。如果数据是通过表单通过 action(=”process.php”) 发送的,为什么我需要 ajax 同时做同样的事情?
如果有一个展示完整过程的示例就好了
因为当你点击提交按钮时,你不想让整个页面重新加载,你只想让“数据发送->请求接收”过程在后台静默地发生。
这就是为什么当你用 ajax 做这件事时,通常会阻止提交按钮的默认行为(否则就像你提到的那样毫无意义)。
当你执行
serialize()
并将它转换为查询字符串时,查询字符串的长度是否限制在 2000 个字符以内?
如何发送一个类似 40000 个字符的字符串,这种方法可以工作吗?