Hướng dẫn can you submit forms using javascript? - bạn có thể gửi biểu mẫu bằng javascript không?

Tôi đã đưa ra một quyết tâm dễ dàng bằng cách sử dụng một hình thức đơn giản ẩn trên trang web của mình với cùng thông tin mà người dùng đã đăng nhập. Ví dụ: Nếu bạn muốn người dùng đăng nhập vào biểu mẫu này, bạn có thể thêm một cái gì đó như thế này vào biểu mẫu sau đây.


Cho đến nay tôi biết tôi là người đầu tiên ẩn biểu mẫu và gửi nó qua việc nhấp vào liên kết. Có liên kết gửi một biểu mẫu ẩn với thông tin. Sẽ không an toàn 100% nếu bạn không thích phương thức đăng nhập tự động trên trang web của mình với mật khẩu đang ngồi trên khu vực văn bản mật khẩu biểu mẫu ẩn ...

Được rồi, vì vậy đây là công việc. Hãy để nói

$hidden_forum = '
';
1 là tài khoản và
$hidden_forum = '
';
2 là mật khẩu.

Đầu tiên làm biểu mẫu trong tập lệnh PHP của bạn. Nếu bạn không thích HTML trong đó, hãy sử dụng dữ liệu tối thiểu và sau đó

$hidden_forum = '
';
3 trong giá trị ở dạng ẩn. Tôi chỉ sử dụng giá trị PHP và tiếng vang ở bất cứ nơi nào tôi muốn pref bên cạnh nút biểu mẫu vì bạn không thể thấy nó.

Mẫu PHP để in

$hidden_forum = '
';

PHP và liên kết để gửi biểu mẫu


Forum

Các biểu mẫu HTML có thể gửi yêu cầu HTTP một cách khai báo. Nhưng các biểu mẫu cũng có thể chuẩn bị một yêu cầu HTTP để gửi qua JavaScript, ví dụ thông qua

$hidden_forum = '
';
4. Bài viết này khám phá những cách tiếp cận như vậy.

Một biểu mẫu không phải lúc nào cũng là một hình thức

Với các ứng dụng web tiến bộ, các ứng dụng trang đơn và các ứng dụng dựa trên khung, thông thường sử dụng các biểu mẫu HTML để gửi dữ liệu mà không tải tài liệu mới khi nhận được dữ liệu phản hồi. Trước tiên hãy nói về lý do tại sao điều này đòi hỏi một cách tiếp cận khác.

Đạt được quyền kiểm soát giao diện toàn cầu

Đệ trình biểu mẫu HTML tiêu chuẩn, như được mô tả trong bài viết trước, tải URL nơi dữ liệu được gửi, có nghĩa là cửa sổ Trình duyệt điều hướng với tải toàn trang. Tránh tải toàn trang có thể cung cấp trải nghiệm mượt mà hơn bằng cách tránh độ trễ mạng và các vấn đề trực quan có thể xảy ra như nhấp nháy.

Nhiều UI hiện đại chỉ sử dụng các biểu mẫu HTML để thu thập đầu vào từ người dùng và không phải để gửi dữ liệu. Khi người dùng cố gắng gửi dữ liệu, ứng dụng sẽ kiểm soát và truyền dữ liệu không đồng bộ trong nền, chỉ cập nhật các phần của UI yêu cầu thay đổi.

Gửi dữ liệu tùy ý không đồng bộ thường được gọi là AJAX, là viết tắt của "JavaScript và XML không đồng bộ"."Asynchronous JavaScript And XML".

Nó khác biệt như thế nào?

Đối tượng DOM

$hidden_forum = '
';
4 (XHR) có thể xây dựng các yêu cầu HTTP, gửi chúng và truy xuất kết quả của chúng. Trong lịch sử,
$hidden_forum = '
';
4 được thiết kế để tìm nạp và gửi XML làm định dạng trao đổi, từ đó đã được JSON thay thế. Nhưng cả XML và JSON đều không phù hợp với mã hóa yêu cầu dữ liệu biểu mẫu. Dữ liệu biểu mẫu (
$hidden_forum = '
';
7) được làm bằng danh sách được mã hóa URL của các cặp khóa/giá trị. Để truyền dữ liệu nhị phân, yêu cầu HTTP được định hình lại thành
$hidden_forum = '
';
8.

Lưu ý: API tìm nạp thường được sử dụng thay cho XHR ngày nay - đây là phiên bản hiện đại, cập nhật của XHR, hoạt động theo cách tương tự nhưng có một số lợi thế. Hầu hết các mã XHR bạn sẽ thấy trong bài viết này có thể được trao đổi để tìm nạp. The Fetch API is often used in place of XHR these days — it is a modern, updated version of XHR, which works in a similar fashion but has some advantages. Most of the XHR code you'll see in this article could be swapped out for Fetch.

Nếu bạn kiểm soát phần cuối (mã được thực thi trong trình duyệt) và phần cuối (mã được thực thi trên máy chủ), bạn có thể gửi JSON/XML và xử lý chúng theo cách bạn muốn.

Nhưng nếu bạn muốn sử dụng dịch vụ bên thứ ba, bạn cần gửi dữ liệu theo định dạng mà các dịch vụ yêu cầu.

Vậy làm thế nào chúng ta nên gửi dữ liệu như vậy? Các kỹ thuật khác nhau bạn sẽ yêu cầu được thực hiện dưới đây.

Gửi dữ liệu biểu mẫu

Có 3 cách để gửi dữ liệu biểu mẫu:

  • Xây dựng một
    $hidden_forum = '
    ';
    
    4 theo cách thủ công.
  • Sử dụng một đối tượng độc lập
    
    
    Forum
    0.
  • Sử dụng
    
    
    Forum
    0 liên kết với phần tử
    
    
    Forum
    2.

Hãy nhìn vào họ một cách chi tiết.

Xây dựng một xmlhttprequest theo cách thủ công

$hidden_forum = '
';
4 là cách an toàn và đáng tin cậy nhất để thực hiện các yêu cầu HTTP. Để gửi dữ liệu biểu mẫu với
$hidden_forum = '
';
4, hãy chuẩn bị dữ liệu bằng cách mã hóa URL và tuân thủ các chi tiết cụ thể của các yêu cầu dữ liệu biểu mẫu.

Hãy xem xét một ví dụ:

<button>Click Me!button>

Và bây giờ JavaScript:

const btn = document.querySelector('button');

function sendData(data) {
  console.log('Sending data');

  const XHR = new XMLHttpRequest();

  const urlEncodedDataPairs = [];

  // Turn the data object into an array of URL-encoded key/value pairs.
  for (const [name, value] of Object.entries(data)) {
    urlEncodedDataPairs.push(`${encodeURIComponent(name)}=${encodeURIComponent(value)}`);
  }

  // Combine the pairs into a single string and replace all %-encoded spaces to
  // the '+' character; matches the behavior of browser form submissions.
  const urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+');

  // Define what happens on successful data submission
  XHR.addEventListener('load', (event) => {
    alert('Yeah! Data sent and response loaded.');
  });

  // Define what happens in case of error
  XHR.addEventListener('error', (event) => {
    alert('Oops! Something went wrong.');
  });

  // Set up our request
  XHR.open('POST', 'https://example.com/cors.php');

  // Add the required HTTP header for form data POST requests
  XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

  // Finally, send our data.
  XHR.send(urlEncodedData);
}

btn.addEventListener('click', () => {
  sendData({ test: 'ok' });
})

Đây là kết quả trực tiếp:

Sử dụng xmlhttprequest và đối tượng formData

Xây dựng một yêu cầu HTTP bằng tay có thể là quá sức. May mắn thay, đặc tả XMLHTTPREQUEST cung cấp một cách mới hơn, đơn giản hơn để xử lý các yêu cầu dữ liệu biểu mẫu với đối tượng


Forum
0.

Đối tượng


Forum
0 có thể được sử dụng để xây dựng dữ liệu biểu mẫu để truyền hoặc để lấy dữ liệu trong một yếu tố biểu mẫu để quản lý cách gửi.

Sử dụng đối tượng này được chi tiết trong việc sử dụng các đối tượng FormData, nhưng đây là hai ví dụ:

Sử dụng một đối tượng formdata độc lập

<button>Click Me!button>

Bạn nên quen thuộc với mẫu HTML đó. Bây giờ cho JavaScript:

const btn = document.querySelector('button');

function sendData(data) {
  const XHR = new XMLHttpRequest();
  const FD = new FormData();

  // Push our data into our FormData object
  for (const [name, value] of Object.entries(data)) {
    FD.append(name, value);
  }

  // Define what happens on successful data submission
  XHR.addEventListener('load', (event) => {
    alert('Yeah! Data sent and response loaded.');
  });

  // Define what happens in case of error
  XHR.addEventListener('error', (event) => {
    alert('Oops! Something went wrong.');
  });

  // Set up our request
  XHR.open('POST', 'https://example.com/cors.php');

  // Send our FormData object; HTTP headers are set automatically
  XHR.send(FD);
}

btn.addEventListener('click', () => {
  sendData({ test: 'ok' });
});

Đây là kết quả trực tiếp:

Sử dụng xmlhttprequest và đối tượng formData

Xây dựng một yêu cầu HTTP bằng tay có thể là quá sức. May mắn thay, đặc tả XMLHTTPREQUEST cung cấp một cách mới hơn, đơn giản hơn để xử lý các yêu cầu dữ liệu biểu mẫu với đối tượng


Forum
0.

Đối tượng


Forum
0 có thể được sử dụng để xây dựng dữ liệu biểu mẫu để truyền hoặc để lấy dữ liệu trong một yếu tố biểu mẫu để quản lý cách gửi.

<form id="myForm">
  <label for="myName">Send me your name:label>
  <input id="myName" name="name" value="John" />
  <input type="submit" value="Send Me!" />
form>

Sử dụng đối tượng này được chi tiết trong việc sử dụng các đối tượng FormData, nhưng đây là hai ví dụ:

window.addEventListener("load", () => {
  function sendData() {
    const XHR = new XMLHttpRequest();

    // Bind the FormData object and the form element
    const FD = new FormData(form);

    // Define what happens on successful data submission
    XHR.addEventListener("load", (event) => {
      alert(event.target.responseText);
    });

    // Define what happens in case of error
    XHR.addEventListener("error", (event) => {
      alert('Oops! Something went wrong.');
    });

    // Set up our request
    XHR.open("POST", "https://example.com/cors.php");

    // The data sent is what the user provided in the form
    XHR.send(FD);
  }

  // Get the form element
  const form = document.getElementById("myForm");

  // Add 'submit' event handler
  form.addEventListener("submit", (event) => {
    event.preventDefault();

    sendData();
  });
});

Đây là kết quả trực tiếp:

Sử dụng xmlhttprequest và đối tượng formData

Xử lý dữ liệu nhị phân

Nếu bạn sử dụng đối tượng


Forum
0 có biểu mẫu bao gồm các tiện ích
<button>Click Me!button>
2, dữ liệu sẽ được xử lý tự động. Nhưng để gửi dữ liệu nhị phân bằng tay, có thêm việc phải làm.

Có nhiều nguồn cho dữ liệu nhị phân, bao gồm

<button>Click Me!button>
3,
<button>Click Me!button>
4 và WEBRTC. Thật không may, một số trình duyệt di sản không thể truy cập dữ liệu nhị phân hoặc yêu cầu các cách giải quyết phức tạp. Để tìm hiểu thêm về API
<button>Click Me!button>
3, hãy xem sử dụng các tệp từ các ứng dụng web.

Cách gửi dữ liệu nhị phân ít phức tạp nhất là sử dụng phương pháp

<button>Click Me!button>
7 của ____ 20, được thể hiện ở trên. Nếu bạn phải làm điều đó bằng tay, nó khó khăn hơn.

Trong ví dụ sau, chúng tôi sử dụng API

<button>Click Me!button>
3 để truy cập dữ liệu nhị phân và sau đó xây dựng yêu cầu dữ liệu biểu mẫu nhiều phần bằng tay:

<form id="theForm">
  <p>
    <label for="theText">text data:label>
    <input id="theText" name="myText" value="Some text data" type="text" />
  p>
  <p>
    <label for="theFile">file data:label>
    <input id="theFile" name="myFile" type="file" />
  p>
  <button>Send Me!button>
form>

Như bạn thấy, HTML là một


Forum
2 tiêu chuẩn. Không có gì kỳ diệu đang diễn ra. "Phép thuật" nằm trong JavaScript:

$hidden_forum = '
';
0

Đây là kết quả trực tiếp:

Sự kết luận

Tùy thuộc vào trình duyệt và loại dữ liệu bạn đang xử lý, việc gửi dữ liệu biểu mẫu qua JavaScript có thể dễ dàng hoặc khó khăn. Đối tượng


Forum
0 nói chung là câu trả lời và bạn có thể sử dụng polyfill cho nó trên các trình duyệt kế thừa.

Xem thêm

Con đường học tập

Chủ đê nâng cao

Cách chính xác để gửi biểu mẫu bằng JavaScript là gì?

Khi chúng tôi nhấp vào liên kết, chức năng SubborForm () sẽ được thực thi.Hàm này sẽ nhận được đối tượng phần tử bằng phương thức Dom getEuityById () bằng cách chuyển ID biểu mẫu cho phương thức này, sau đó biểu mẫu sẽ được gửi bằng cách sử dụng Phương thức Substem ().Ví dụ: Tạo một biểu mẫu và gửi nó bằng cách sử dụng phương pháp trên.submitForm() will get executed. This function will get the element object using DOM getElementById() method by passing the form id to this method, then the form will be submitted by using submit() method. Example: Create a form and submit it using the above approach.

JavaScript có thể xử lý các biểu mẫu không?

Với JavaScript ở phía bạn, bạn có thể xử lý các biểu mẫu đơn giản mà không cần gọi máy chủ.Và khi gửi biểu mẫu cho chương trình CGI là cần thiết, bạn có thể yêu cầu JavaScript chăm sóc tất cả các yêu cầu sơ bộ, chẳng hạn như xác thực đầu vào để đảm bảo rằng người dùng đã chấm dứt mọi i.you can process simple forms without invoking the server. And when submitting the form to a CGI program is necessary, you can have JavaScript take care of all the preliminary requirements, such as validating input to ensure that the user has dotted every i.

Điều gì xảy ra khi bạn gửi một biểu mẫu trong JavaScript?

Về cơ bản, JavaScript gửi dữ liệu biểu mẫu (xem các ví dụ bên dưới!) Đến tệp PHP được chỉ định, xử lý dữ liệu và lặp lại phản hồi của Echo.Bạn nhận được phản hồi đó, chia nó thành các biến và thay đổi trang phù hợp.javascript sends the form data (see below examples!) to the specified PHP file, which processes the data and echo 's back a response. You receive that response, break it up into variables, and change the page accordingly.