最近在做一个apicloud的app项目,在写前端请求的时候遇到的错误。
一、{"statusCode":0,"state":2,"progress":100,"body":"连接错误,请检查网络或者请求配置是否正确","msg":"连接错误,请检查网络或者请求配置是否正确","status":2}
代码如下 :
var code = $api.byId('code').innerHTML;
api.ajax({
url:'http://www.app.com/app.php',//本地的虚拟站点是不行的,需要外网的
method: 'post',
data: {
values: {
'code': code //json对象
}
}
}, function(ret, err) {
if (ret) {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err) });
}
});
url是我自己在本地定义的虚拟站点,我是用的WIFI真机同步调试的,手机和电脑连的同一个无线,
既然是连接不到,说明是服务器端有问题,(之前好不容易解决了很多前端错误),这个问题很简单就是因为手机是访问不到你电脑上的虚拟站点的,需要用真机,所以就改成url请求外网的接口,就成功啦!
连接成功后,当我从服务端返回数据时,又出问题了。
二、{"statusCode":200,"body":"连接成功{"id":"1","code":"6956511919826","name":"labtop","born_time":"2016-10-10","position":"on the desktop"}", "msg":"服务器返回数据格式错误", "code":3}
服务器代码如下,简单的先用原生的测试,没有用框架,json_encode($row)把数组转换为json对象,
dataType:
- 类型:字符串
- 默认值:json
- 描述:(可选项)返回数据类型。若该字段传json,接收到服务器返回的数据后会尝试将其转换成JSON对象,如果无法转成JSON对象,将返回数据类型错误
<?php
require './conn.php';
$code = $_GET['code'];
#echo $code;
if(isset($code)){
$query = "select * from product where code=:code";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':code',$code);
$stmt->execute();
#返回关联数组,索引是字段
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo json_encode($row);//返回json对象
}
?>
服务器代码怎么检查都是没有错的,原因在于body里面不能这样写 “连接成功{json数据} ” ,
因此我的出错的原因就是body体里 既有字符串又有json对象,因此报错,真是一定要小心啊!
好好检查服务端代码有没有错误,以及返回的数据格式的问题。
callback(ret, err)
ret:
- 类型:JSON对象或字符串
- 描述:通常情况下直接为服务器返回的数据,在一些情况下则会有所不同,依赖于传入的dataType、returnAll参数,以及上传文件时是否返回上传进度。
// returnAll参数传true时,内部字段为:
{
statusCode: //状态码,数字类型
headers: {}, //响应头,JSON对象
body: '' //消息体,即服务器返回的数据。若dataType为json,那么body为JSON对象,否则为字符串
}
”
最后就成功了,开心!