吐槽小程序开发踩过的坑, 以及一些解决方法

1,138 阅读3分钟

网络请求相关

bug: http状态码不管是什么,一律被解析成200

要真正解决,只能等官方去fix这个bug了.

网络请求中的请求参数要自己拼:

如果api是post请求,参数是key-value形式,那么直接设置Object是不行的,必须手动拼:

设置成String类型.但是还是会报错 :

而App里的请求是没有问题的:


解决办法:目前先用get请求的参数拼接形式来发post请求.

抓包时是这样的:请求成功了.

对于get请求,
将参数设置到data字段下是没有效果的,必须手动拼接url,这时何等的坑爹:

将上面的api方法改成get,参数设置到data中,抓包可知,data里设的字符串完全就没有自动拼到url后面去.

综上

data这个字段就不要去理它,目前完全不可用.参数都拼在url后面,指定get还是post方法就好.

公测开放后,强制要求请求全部为https

配置服务器的页面,https是写死的,不可更改

如果用了这个列表以外的域名,直接就被开发工具拦截,请求无法发出去,提示请求不在域名列表中.

解决办法:服务器相关api升级ssl

可以用这个免费的:Let's Encrypt

图片

没有设置初始图的api,也没有图片缓存,于是,网络不好时,情况是这样的:

没有设置图片加载失败后统一的处理,必须每个image标签都写处理方式

下面两张图片加载失败,于是一片空白.充分感受到api设计人员的业余.

dialog(modal)的content无法解析换行符:

对话框样式太少,可修改的样式太少

看看手机端的常见对话框常用样式有哪些吧

DialogUtil

要弹出其他样式,自定义样式的,怎么办?自己写css吧.拿这个去改改:

    .dialogcover {
    position: fixed;
    font-family: Arial, Helvetica, sans-serif;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    z-index: 9999;


    }

    .dialogcover:target {
        opacity:1;
        pointer-events: auto;
    }

    .dialogcontainer {
        width: 80%;
        position: fixed;
        margin-left: 5%;
        margin-right: 5%;
        margin-top: 40%;
        padding: 5px 20px 13px 20px;
        border-radius: 10px;
        background: #ffffff;
        z-index: 99999;
        opacity:1;
    }

toast有成功和loading状态,竟然没有失败状态,are you OK?更奇葩的是,它的宽度居然是写死的,字一多就丑得要死

不管有没有,我们自己直接拿成功的toast包装好showFailToast()方法,,到处用着先.
最后如果官方真不提供,自己用css写一个!

点击事件被上层view消费,还会传递到下层

点击了去支付后,不仅会跳到支付页面,还会调用后面整个item的点击事件,跳到订单详情页

navigateTo无法封装到另一个js方法中,只能直接写,而且失败还不走失败的回调

解决办法: 尽量用navigator标签吧.

block的item不能讲iteminfo整个obj传回来,只能传基本数据类型

拿到的是:

通过scrollview来实现上拉加载更多,一直没有触发加载更多的事件

使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。
如果scroll-view高度设置为100%,则不能触发上拉刷新和下拉加载事件......

wxml模板不生效

有的人那里可以生效,有的不能,我这里也不生效.

开发工具更新后

原先height:auto失效,必须指定image的高度为具体数值,不然高度为0.

tab切换

tab切换时,注意wxml里和js里要用同一类型的值来判断当前,比如wxml里用string,那js里就不能用int


Data里,tabIndex的值只能取字符串(用单引号或双引号),不能取int.