2019年12月17日 19:37:34
APIcloud莫名其妙的错–01:使用ajax传值参数为空
今天写APP的时候遇见个错误,我使用的是VScode,是写APIcloud的项目,我自己封装了个调用ajax方法,结果总是传值为空,我用Postman试了试,接口没有问题,就是我用VScode测试的时候传值为空
修改前
封装方法
ajaxApi
是域名,apiUrl
是接口,apiData
是参数
function sendPostData(apiUrl,apiData,callback){
api.ajax({
url : ajaxApi + apiUrl,
method:'POST',
dataType:'json',
returnAll:false,
data : apiData,
}, function(ret, err) {
if (ret) {
if (ret.code == 0) {
callback(ret);
} else {
api.toast({
msg : ret.message
});
// callback('nono');
}
} else {
callback('error');
}
});
}
调用方法
这个是普通的登录接口
getLoginApi()
是返回接口名称的方法
username,password
是参数
var loginApi = getLoginApi();
sendPostData(loginApi,{
username:phone,
password:password
},function(res){
console.log('打印回调结果');
for(var a in res){
console.log(a+'=>'+res[a]);
}
})
遇见问题
对调总是说我没有传参数,参数为空,
我用Postman试了试,接口是没有问题的,这样就是前端的问题了,
我在ajax传值的前一步也打印过,是有参数的,所以我想是不是底层源码封装的问题,
网上找了一下午,突然看到个博客,感觉可能是参数名问题
博客地址:https://blog.csdn.net/qq_26516509/article/details/78732882
解决问题
封装方法参数外包裹一层,问题解决,后台接值成功
function sendPostData(apiUrl,apiData,callback){
var val = {
values:apiData
};
api.ajax({
url : ajaxApi + apiUrl,
method:'POST',
dataType:'json',
returnAll:false,
data : val,
}, function(ret, err) {
if (ret) {
if (ret.code == 0) {
callback(ret);
} else {
api.toast({
msg : ret.message
});
// callback('nono');
}
} else {
callback('error');
}
});
}
原因
这个是封装问题,本来我正常写ajax,data就可以传递参数的,但是这里多了一层,这里的data只能传递values
,所以就把参数放到这里面传递了