插件窝 干货文章 微信小程序离线表单提交:如何实现离线填写表单并在网络恢复后自动提交?

微信小程序离线表单提交:如何实现离线填写表单并在网络恢复后自动提交?

表单 提交 数据 网络 590    来源:    2025-03-20

实现微信小程序离线表单提交并在网络恢复后自动提交的功能,可以通过以下步骤来实现:

1. 使用本地存储保存表单数据

微信小程序提供了 wx.setStorageSyncwx.getStorageSync 等 API,可以将表单数据存储在本地。当用户填写表单时,先将数据保存到本地存储中。

// 保存表单数据到本地存储
function saveFormData(formData) {
  try {
    wx.setStorageSync('formData', formData);
  } catch (e) {
    console.error('保存表单数据失败', e);
  }
}

// 获取本地存储的表单数据
function getFormData() {
  try {
    return wx.getStorageSync('formData');
  } catch (e) {
    console.error('获取表单数据失败', e);
    return null;
  }
}

2. 监听网络状态变化

微信小程序提供了 wx.onNetworkStatusChange API,可以监听网络状态的变化。当网络恢复时,可以尝试提交之前保存的表单数据。

// 监听网络状态变化
wx.onNetworkStatusChange(function (res) {
  if (res.isConnected) {
    // 网络恢复,尝试提交表单数据
    submitFormData();
  }
});

3. 提交表单数据

在网络恢复时,从本地存储中获取表单数据并提交到服务器。提交成功后,清除本地存储中的表单数据。

// 提交表单数据
function submitFormData() {
  const formData = getFormData();
  if (formData) {
    wx.request({
      url: 'https://your-server-url.com/submit',
      method: 'POST',
      data: formData,
      success(res) {
        if (res.statusCode === 200) {
          // 提交成功,清除本地存储中的表单数据
          wx.removeStorageSync('formData');
          console.log('表单数据提交成功');
        } else {
          console.error('表单数据提交失败', res);
        }
      },
      fail(err) {
        console.error('表单数据提交失败', err);
      }
    });
  }
}

4. 在页面加载时检查网络状态

在页面加载时,可以检查当前网络状态。如果网络正常,尝试提交之前保存的表单数据。

// 页面加载时检查网络状态
wx.getNetworkType({
  success(res) {
    if (res.networkType !== 'none') {
      // 网络正常,尝试提交表单数据
      submitFormData();
    }
  }
});

5. 处理表单提交失败的情况

如果表单提交失败(例如服务器返回错误),可以将表单数据继续保存在本地,等待下一次网络恢复时再次提交。

6. 用户提示

在表单提交过程中,可以给用户适当的提示,例如“正在提交表单数据”、“表单数据已保存,将在网络恢复后自动提交”等。

wx.showToast({
  title: '表单数据已保存,将在网络恢复后自动提交',
  icon: 'none',
  duration: 2000
});

总结

通过以上步骤,可以实现微信小程序的离线表单填写和网络恢复后自动提交的功能。关键在于利用本地存储保存表单数据,并通过监听网络状态变化来触发提交操作。