如何使用 JavaScript 提交 HTML 表单

通过阻止表单提交时的默认行为,可以在 JavaScript 中处理 HTML 表单。
然而,这样做我们也阻止了表单的提交,因此我们经常希望在脚本的后面提交它。
这可以通过调用表单上的提交方法来完成,也可以通过从 JavaScript 发送 AJAX 请求并在后台静默发送 HTTP POST 请求来完成,而无需更改网页 URL。

在许多情况下,允许正常提交表单(以防用户浏览器中禁用 JavaScript)和允许通过 JavaScript 提交表单可能是有意义的。

AJAX 代表异步 JavaScript 和 XML,传统上用于与 Web 服务器后端进行通信。
现在,它的使用更加宽松,因为我们还可以使用 JSON 和纯文本——实际上不需要 XML 部分。
尽管如此,使用诸如 JSON 之类的格式比发送普通的 POST 请求更容易,因为它避免了在发送 HTTP POST 请求之前手动从 JavaScript 对 POST 参数进行 url 编码的需要。

如前所述,我们可以使用 preventDefault 方法阻止表单提交,以下示例显示了一种简单的方法:

let exampleForm =  document.querySelector('#unique_id_of_form');
exampleForm.addEventListener('submit', event => {
  //Prevent the default behavior of the submit button
  event.preventDefault();
  //Handle the HTML form data here!
  let inputName = document.querySelector('#unique_id_of_form_input_field').value;
  //Test with console.log() or alert()
  console.log(inputName);
  //alert(inputName);
  //After handling the form data, submit the form.
  //If you need to validate the form data, this is a good place to do it!
  exampleForm.submit();
});

使用 JavaScript 提交 HTML 表单

我们可以使用 submit 方法提交 HTML 表单,也可以创建一个 HTTP POST 请求来静默提交表单。
后一个选项的优点是它允许我们根据服务器响应动态更新页面内容。

submit 方法不会调用表单上的提交事件,而是直接提交表单。

可以使用 submit 方法提交 HTML 表单:

function form_submit() {
  let exampleForm =  document.querySelector('#unique_id_of_form');
  exampleForm.submit();
}

发送带参数的 HTTP POST 请求

要从 JavaScript 发送 HTTP POST 请求,我们需要使用 XMLHttpRequest 对象。
我已经创建了一个 HTTP 客户端类来简化事情,所以我们只需要从中实例化一个新的 HTTP 客户端对象来发送一个 AJAX 请求。

由于我们发送的是异步请求,因此我们需要在“回调”函数中处理响应。
为简单起见,我将示例中的回调函数命名为“callback”,但我们可以随意命名。

下面的示例显示了如何使用前面提到的客户端类发送 HTTP POST 请求:

let postSTR = "name=Jacob&status=active";
let postData = encodeURI(postSTR);
httpClient = new http_client();
httpClient.post("https://onitroad.com/Examples/form-submission-tester.php", postData, callback);
function callback(response) {
  //Do stuff here
  //Test that we got a response from the server
  console.log(response);
  //alert(response);
}

要使用提交表单的结果更新页面,我们可以使用 innerHTML 访问页面上应该更新的元素:

function callback(response) {
  //Do stuff here
  document.querySelector("#unique_id_of_html_element").innerHTML = response;
}

上面脚本中的 postSTR 变量可以填充我们从 HTML 表单元素中获取的内容。
要获取表单数据,我们可以简单地使用 querySelector 并从相关输入元素的 value 属性中提取它。

每个 POST 参数都需要用与号 (&) 分隔,最后我们还在发送请求之前使用 encodeURI 对字符串进行 URI 编码。

如果我们正在处理 textarea ,则可以使用 innerHTML 来获取 textarea 元素的内容。

日期:2020-06-02 22:17:04 来源:oir作者:oir