是否可以为浏览器制作表单,将数据存储在本地并在浏览器上线时发送数据?

舍尔德

我想制作一个带有 3 个复选框的表单,这些复选框都有值。当表单被提交并且浏览器离线时。当浏览器/设备联机时,必须发送表单数据。

Roko C. Buljan

如果您依赖 HTTPS,您可以使用Service Worker API
或者您可以检查navigator.onLine

使用navigator.onLineonline事件提交表单数据

  • 使用 AJAX向服务器发送数据。
  • 创建一个预提交阶段,您可以在其中检查导航器是否在线MDN
  • 在预提交时,如果在线 - 提交表单数据
  • 在预提交时,如果离线 - 将您的表单数据对象送到stack数组。
  • 监听online事件和FIFO -empty的stack阵列,提交对象一个接一个。

	// App's stack to store form data - while offline
const stack = []; // Make available throughout your APP. Or use sessionStorage

// SUBMIT
function submit(formData) {
   console.log(formData); // TODO: send to server using jQuery $.ajax or whatever
}

// PRE SUBMIT
function preSubmit(ev) {
  ev.preventDefault(); // Prevent form submit, we'll use AJAX

  const formData = { // or use JS's FormData API instead
     action: this.action, method: this.method, data: $(this).serialize()
  };

  if (navigator.onLine) {
    submit( formData );     // Submit with AJAX, as usual
  } else {
    stack.push( formData ); // Push to stack! We're offline!
  }
}

// CHECK - Called when online
function stackCheck() {
  if (stack.length) {
    // Empty + submit the data in stack, one by one
    while (stack.length) submit( stack.shift() );
  }
}

// Listen for when online
window.addEventListener('online', stackCheck);
// Every form on our page
$('form').on('submit', preSubmit);
	
	
<form action="/api/message" method="delete">
  <input type="hidden" name="id" value="31">
  <input type="submit" value="Delete message">
</form>

<form action="/api/user" method="post">
  <input type="text" name="name" value="john">
  <input type="text" name="surname" value="doe">
  <input type="submit" value="Add user">
</form>

Now, open developer console and check the "Offline" mode.<br>
Click the buttons and turn back online.

<script src="//code.jquery.com/jquery-3.1.0.js"></script>

PS:值得阅读和实施:https : //developer.mozilla.org/en-US/docs/Web/API/FormData

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据本地存储在浏览器中并发送到服务器

来自分类Dev

在向浏览器发送数据时构建websocket头

来自分类Dev

在浏览器上存储数据

来自分类Dev

将表单数据发送为JSON-浏览器更改Content-Type

来自分类Dev

是否可以在 Web 浏览器上使用本地 SQLite 数据库

来自分类Dev

每秒可以将25次本地存储到浏览器本地存储吗?

来自分类Dev

是否可以通过指定您不想发送任何浏览器数据来发送跨域请求?

来自分类Dev

如何在本地浏览器中存储数据并从中取回数据

来自分类Dev

Chrome浏览器在查看图像时是否将图像存储在我的本地计算机上?

来自分类Dev

Google Chrome浏览器保存的表单数据

来自分类Dev

将数据从浏览器发送到服务器并返回

来自分类Dev

在ember simple auth中将数据保存在浏览器的本地存储中

来自分类Dev

清除浏览器本地存储会影响混合应用程序数据吗?

来自分类Dev

在浏览器和会话中将数据存储为Cookie

来自分类Dev

在Parse数据浏览器中安全存储用户的余额

来自分类Dev

我的浏览器在哪里存储临时数据?

来自分类Dev

如何在浏览器的cookie中存储数据

来自分类Dev

启动浏览器时是否可以打开多个网页?

来自分类Dev

是否可以将javascript代码安全地发送到用户的浏览器?

来自分类Dev

Chrome操作系统中的文件浏览器是否通过网络发送数据?

来自分类Dev

如何评估浏览器中是否存在数据?

来自分类Dev

HTML表单仅在某些浏览器的第二次提交时提交数据

来自分类Dev

使用浏览器开发工具时,屏蔽表单数据中的值

来自分类Dev

关闭浏览器时正在擦除数据。

来自分类Dev

数据更新时,Highchart 自动翻页浏览器

来自分类Dev

通过套接字将数据从浏览器发送到C#/ Java

来自分类Dev

将新数据从Java程序发送到Web浏览器

来自分类Dev

如何从浏览器将数据发送到节点脚本?

来自分类Dev

如何不使用浏览器将数据发送到PHP页面?

Related 相关文章

  1. 1

    将数据本地存储在浏览器中并发送到服务器

  2. 2

    在向浏览器发送数据时构建websocket头

  3. 3

    在浏览器上存储数据

  4. 4

    将表单数据发送为JSON-浏览器更改Content-Type

  5. 5

    是否可以在 Web 浏览器上使用本地 SQLite 数据库

  6. 6

    每秒可以将25次本地存储到浏览器本地存储吗?

  7. 7

    是否可以通过指定您不想发送任何浏览器数据来发送跨域请求?

  8. 8

    如何在本地浏览器中存储数据并从中取回数据

  9. 9

    Chrome浏览器在查看图像时是否将图像存储在我的本地计算机上?

  10. 10

    Google Chrome浏览器保存的表单数据

  11. 11

    将数据从浏览器发送到服务器并返回

  12. 12

    在ember simple auth中将数据保存在浏览器的本地存储中

  13. 13

    清除浏览器本地存储会影响混合应用程序数据吗?

  14. 14

    在浏览器和会话中将数据存储为Cookie

  15. 15

    在Parse数据浏览器中安全存储用户的余额

  16. 16

    我的浏览器在哪里存储临时数据?

  17. 17

    如何在浏览器的cookie中存储数据

  18. 18

    启动浏览器时是否可以打开多个网页?

  19. 19

    是否可以将javascript代码安全地发送到用户的浏览器?

  20. 20

    Chrome操作系统中的文件浏览器是否通过网络发送数据?

  21. 21

    如何评估浏览器中是否存在数据?

  22. 22

    HTML表单仅在某些浏览器的第二次提交时提交数据

  23. 23

    使用浏览器开发工具时,屏蔽表单数据中的值

  24. 24

    关闭浏览器时正在擦除数据。

  25. 25

    数据更新时,Highchart 自动翻页浏览器

  26. 26

    通过套接字将数据从浏览器发送到C#/ Java

  27. 27

    将新数据从Java程序发送到Web浏览器

  28. 28

    如何从浏览器将数据发送到节点脚本?

  29. 29

    如何不使用浏览器将数据发送到PHP页面?

热门标签

归档