师大酸梅杨
师大酸梅杨
  • 发布:2018-12-04 11:18
  • 更新:2018-12-04 11:18
  • 阅读:1159

【报Bug】MUI V3.7.2 ajax的GET请求时,参数体转换问题

分类:MUI
mui

[内容]
在使用ajax请求时,因公司接口API的特殊性(应该为API接收类型写法的错误),Get请求,参数体需要放在请求体里。可以理解为Get方法,穿参数使用的是post的形式。
有一次无意中更新了下项目中使用的mui.min,js的版本。从V3.0.0更新到了V3.7.2,结果发现请求不到结果了。关键是这个接口为app的版本更新功能。一阵着急。通过代码比对后,发现前后mui.min.js 两个版本的串代码存在差异。V3.7.2版本的调试结果如下:


经过这部分的转换后。请求的url变为 "http://#.com/api/System/GetVersion?{"type":1,"typeValue":2}",
对应代码片段(大约在1376行):

o = function(b) {  
    if(b.processData && b.data && "string" != typeof b.data) {  
        var e = b.contentType;  
        !e && b.headers && (e = b.headers["Content-Type"]), e && ~e.indexOf(d) ? b.data = JSON.stringify(b.data) : b.data = a.param(b.data, b.traditional)  
        }!b.data || b.type && "GET" !== b.type.toUpperCase() || (b.url = p(b.url, b.data), b.data = c)  
            },

此处是将b.data的类型从json直接转换成string类型了。导致Get请求时,调用后续的参数拼接方法时,得到意想不到的结果
拼接方法:

p = function(a, b) {  
    return "" === b ? a : (a + "&" + b).replace(/[&?]{1,2}/, "?")  
    },

然而原先正常的url是 "http://#.com/api/System/GetVersion?type=1&typeValue=2",
这个是V3.0.0的解析结果。这里也贴出V3.0.0的对应代码段(在大约1298行):

o = function(b) {  
    b.processData && b.data && "string" != typeof b.data && (b.data = a.param(b.data, b.traditional)), !b.data || b.type &&  
    "GET" !== b.type.toUpperCase() || (b.url = p(b.url, b.data), b.data = c)  
    },

期望的正常结果是,如果ajax为get请求时,参数的拼接应该还是原来V3.0.0的解析结果。
最后,虽然这个问题不一定常见。但是也确实带来了困扰。开始一直怀疑是API的问题,查来查去,结果却发现原来是自己手贱,看到有最新的mui.min.js,给更新了。然后,也发现,居然也没有mui.min.js的更新日志。 更新了啥也无从知道,以后官方发布了新的mui.js。都要谨慎更新了。

2018-12-04 11:18 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复