最近在做一个apicloud的app项目,在写前端请求的时候遇到的错误。

一、{"statusCode":0,"state":2,"progress":100,"body":"连接错误,请检查网络或者请求配置是否正确","msg":"连接错误,请检查网络或者请求配置是否正确","status":2}

API 接口报错为什么会有Axios错误页面_apicloud

代码如下 : 

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对象,否则为字符串
}

 

API 接口报错为什么会有Axios错误页面_字符串_02


最后就成功了,开心!

API 接口报错为什么会有Axios错误页面_json_03