amis低代码开发ajax提交reload无法触发

amis低代码开发ajax提交reload无法触发,第1张

最近在react中引入amis进行低代码开发,遇到一个问题,记录下来。

业务背景

用户打开页面立即获取一个任务,填写表单并提交,提交完成后获取下一条任务,遇到的bug是表单提交后,无法触发reload

amis schema
let schema = {
    type: 'page',
    name: 'my_page',
    body: {
        type: 'service',
        name: 'my_service',
        api: {
            url: '/task/get',
            adaptor: (payload: any, response: any) => response,
        },
        body: [
            {
                type: 'video',
                className: 'videoWrapper',
                src: '${sourceVideo}',
            },
            {
                type: 'form',
                wrapWithPanel: false,
                rules: [
                    {
                        rule: 'data.algResultReview != 0',
                        message: '请判断安全带状态',
                        name: ['algResultReview'],
                    },
                ],
                body: [
                    {
                        type: 'button-group-select',
                        name: 'algResultReview',
                        label: '是否系安全带:',
                        options: [
                            {
                                label: '是',
                                value: 1,
                            },
                            {
                                label: '否',
                                value: 2,
                            },
                            {
                                label: '无法判断',
                                value: 3,
                            },
                        ],
                    },
                    {
                        type: 'action',
                        label: '保存并下一个',
                        level: 'info',
                        actionType: 'ajax',
                        api: {
                            url: '/task/update',
                            adaptor: (payload: any, response: any) => {
                                return response;
                            },
                            data: {
                                algResultReview: '${algResultReview}',
                                id: '${id}',
                                userName: '${user.userName}',
                            },
                        },
                        reload: 'my_service',
                    },
                ],
            },
        ],
    },
};
原因排查

我们的业务逻辑是update成功之后data返回一个0,排查代码发现amis内部会对ajax的response.data进行判断,如果data为空,会认为无响应,直接报错。(感觉这个限制不太合理,业务接口返回为空也没什么不妥,凭什么在这里给掐死)

function responseAdaptor(ret, api) {
    var data = ret.data;
    var hasStatusField = true;
    if (!data) {
        throw new Error('Response is empty');
    }
    // 返回内容是 string,说明 content-type 不是 json,这时可能是返回了纯文本或 html
    if (typeof data === 'string') {
      //....
    }
}
解决方案

前端在api.adaptor中判断如果是0,return ‘0’

api: {
  url: '/task/update',
  adaptor: (payload: any, response: any) => {
    if(response === 0) {
      return '0'
    }
  return response;
},

后端改接口

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1296639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存