大齐app 2020-02-05 14:18 采纳率: 0%
浏览 117

小程序代码更换后读不到数据,救急?

第一张图片能读取到数据,第二张就读取不到了?


```![图片说明](https://img-ask.csdn.net/upload/202002/05/1580883344_276560.jpg)![图片说明](https://img-ask.csdn.net/upload/202002/05/1580883354_149470.jpg)
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-26 03:13
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在微信小程序中,读取和更新数据通常涉及以下步骤:

    1. 首先,确保您的小程序在微信公众平台上已上线并获取了对应的scope权限。如果未获得权限,则无法访问或更新后台数据。

      // 获取微信公众平台的access_token
      wx.config({
        debug: false, // 是否调试模式
        appId: '你的公众号ID', // 微信公众号ID
        timestamp: '当前时间',
        nonceStr: '随机字符串',
        signature: '你的签名'
      });
      
      // 发送一个请求来获取Access Token
      wx.request({
        url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid,
        method: 'POST',
        data: {
          access_token: 'your_access_token'
        },
        success: function (res) {
          console.log('access_token:', res.data.access_token);
        },
        fail: function () {
          console.error('error:', JSON.parse(res.body));
        }
      });
      
    2. 在前端,你需要在对应的页面组件(例如 PageFragment) 中设置访问API的属性。以下是一个简单的示例,在一个名为 UpdateData 的子页面上读取 data 属性:

      import { Fragment } from 'react';
      
      export default class UpdateData extends Fragment {
        state = {
          data: ''
        };
      
        componentDidMount() {
          wx.getSetting({
            success: function (res) {
              if (res['success']) {
                this.setState({ data: res['data'] });
              } else {
                console.error('Permission denied');
              }
            },
            fail: function () {
              console.error('Failed to get setting data.');
            }
          });
        }
      
        render() {
          return (
            <div>
              <input type="text" value={this.state.data} onChange={(e) => this.setState({ data: e.target.value })}>
              <p>Updated Data: {this.state.data}</p>
            </div>
          );
        }
      }
      

      注意:这个示例使用了 wx.getSetting() 方法来从后台获取data属性,但请确保在实际应用中与开发者工具中的状态比较一致。此外,为了防止XSS攻击,应当对输入字段进行转义和验证,以防止用户向服务器发送恶意脚本。

    3. 通过调用上述配置后的 getSetting 函数,可以在代码中查询或修改后台的data值。以下是一个完整的示例:

      wx.getSetting({
        success: function (res) {
          if (res['success']) {
            console.log('Updating data to ', res['data']);
            this.setData({
              data: res['data']
            });
          } else {
            console.error('Permission denied');
          }
        },
        fail: function () {
          console.error('Failed to get setting data.');
        }
      });
      

      上述代码将读取data属性,将其设置为新获取的值,并将其显示在前端的文本框中。

    注意:每次页面切换时,必须重新获取access_token才能修改数据。因此,当页面刷新或用户离开时,建议在适当的时间点(例如 componentDidMount 生命周期钩子中)调用 wx.getSetting() 获取新的access_token,以便更新数据。同时,可以考虑存储临时的access_token 来避免重复获取。例如:

    let accessToken = localStorage.getItem('access_token');
    
    wx.getSetting({
      success: function (res) {
        if (res['success']) {
          console.log('Updating data to ', res['data']);
          this.setData({
            data: res['data']
          });
        } else {
          console.error('Permission denied');
        }
      },
      fail: function () {
        console.error('Failed to get setting data.');
      }
    });
    
    if (!accessToken) {
      // 如果缓存为空,加载并存储新的access_token
      wx.getSetting({
        success: function (res) {
          if (res['success']) {
            accessToken = res['data'];
            localStorage.setItem('access_token', accessToken);
          } else {
            console.error('Permission denied');
          }
        },
        fail: function () {
          console.error('Failed to get setting data.');
        }
      });
    }
    
    wx.setSetting({
      success: function (res) {
        console.log('Updated data to ', res['data']);
        this.setData({
          data: res['data']
        });
      },
      fail: function () {
        console.error('Failed to get setting data.');
      }
    });
    

    以上就是一个小程序读取和更新数据的基本流程,具体实现细节可能因应用场景而异。根据不同的需求和平台特性,可能还需要处理更多复杂的情况,例如权限检查、数据格式转换等。

    评论

报告相同问题?