小程序:ajax(页面跳转方式、http、ajax的应用)

1、页面跳转方式

概念:超链接标签的作用是从一个页面跳转到另一个页面,a是anchor的缩写,意为:锚。在本网站内的页面称为内部链接

外部链接属性:

href:必须要写的属性,用于指定链接目标的地址

target:用于指定链接页面的打开方式,_self是默认值,_blank为在新窗口中打开

在当前窗口打开:



    
        
        
    
    
        

外部链接

百度

通过外部链接,链接到百度首页:

小程序:ajax(页面跳转方式、http、ajax的应用)_第1张图片

点击链接之后,百度首页在当前窗口打开:

小程序:ajax(页面跳转方式、http、ajax的应用)_第2张图片 

在新窗口打开:



    
        
        
    
    
        

外部链接

百度

小程序:ajax(页面跳转方式、http、ajax的应用)_第3张图片

 点击超链接之后,页面在新的窗口打开:

小程序:ajax(页面跳转方式、http、ajax的应用)_第4张图片

默认是在当前窗口打开。

 

(2)提交表单实现页面跳转

定义收集用户信息的表单:

DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>title>
    head>
    <body>
        <form action="login.html">
            <input type="text" name="username" />
            <input type="submit" />
        form>
    body>
html>

定义接收数据的页面:

DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>title>
    head>
    <body>
        <h5>你好h5>
    body>
html>

点击提交后,跳转到第二个页面:

 

 

 进入第二个页面:

 

 

 

(3)js方式

页面一:

DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>title>
      <script>
           function test(){
               window.location.href='test.html';
          }    
      script>
    head>
    <body>
        <h4>页面一h4>
    <form action="test.html">
        <input type="text" name="username" />
        <input type="submit" value="提交" />
    form>
    body>
html>

页面二:

DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>title>
       <script>
           function test(){
               javascript:history.go(-1);
          }    
      script>
    head>
    <body>
        <h4>页面二h4>
        <button onclick="test()">返回button>
    body>
html>

点击提交:

小程序:ajax(页面跳转方式、http、ajax的应用)_第5张图片

 

 进入页面二后,点击返回,可以重新回到页面一:

小程序:ajax(页面跳转方式、http、ajax的应用)_第6张图片

 

 2、ajax请求数据

(1)GET方式:

书写页面,向服务器发起ajax请求:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>
<body>
     账号:<input type="text" name="user" id="user">
    <br>
    密码:<input type="password" name="password" id="password">
    <br>
    <button id="btn">登录button>
    <span id="sp1">span>
    <script>
        var user=document.getElementById("user")
        var password=document.getElementById("password")
        var btn=document.getElementById("btn")
        var sp1=document.getElementById("sp1")
        btn.onclick=function(){
            var xhr=new XMLHttpRequest();
            xhr.open("get","phpinfo.php?user="+user.value+"&password="+password.value,true)
            xhr.send();
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&xhr.status==200)
                console.log(xhr.responseText)
                sp1.innerHTML=xhr.responseText;
            }
        }
    script>
body>
html>

书写php,模拟服务器,向html页面返回数据。

php 
header("Content-type:text/html;charset=utf-8");//字符编码设置 
$user=$_REQUEST["user"];
$password=$_REQUEST["password"];
echo "{$user},欢迎你,你的密码是{$password}"
?>

(2)post方式

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>
<body>
     账号:<input type="text" name="user" id="user">
    <br>
    密码:<input type="password" name="password" id="password">
    <br>
    <button id="btn">登录button>
    <span id="sp1">span>
    <script>
        var user=document.getElementById("user")
        var password=document.getElementById("password")
        var btn=document.getElementById("btn")
        var sp1=document.getElementById("sp1")
        btn.onclick=function(){
            var xhr=new XMLHttpRequest();
            xhr.open('POST','phpinfo.php',true)
             xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send('user='+user.value+'&password='+password.value);
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&xhr.status==200)
                console.log(xhr.responseText)
                sp1.innerHTML=xhr.responseText;
            }
        }
    script>
body>
html>

(3)get方式与post方式的比较

不同点:

(1)get请求的参数在URL中,post请求在请求体中。用户一般看不到请求体中的内容,post提交相对安全

(2)请求缓存:GET 会被缓存,而post不会

post不管刷新页面多少次,都不会304状态。而get在未改变代码的情况下,第一次刷新为状态码为200,第二次刷新状态码变为304。

(3)get请求长度最多1024kb,post对请求数据没有限制(浏览器和服务器对其有一定的限制)

(4)ajax的get方式的请求不需要设置请求头,而post方式需要

相同点:

GET和POST本质上都是TCP连接,但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中表现出不同。 

 

3、HTTP

(1)http响应和http请求通称为http协议

小程序:ajax(页面跳转方式、http、ajax的应用)_第7张图片

 

 

 点击链接、提交表单都会触发http请求,这种方式会导致页面重载,速度较慢

(2)响应行常见状态码

200 :请求成功。

302 :请求重定向。

当访问网址A时,由于网址A服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。

304 :请求资源没有改变,访问本地缓存。

没有被修改,直接用缓存资源,可以减小开销

 

小程序:ajax(页面跳转方式、http、ajax的应用)_第8张图片

修改后重新加载

 

403:表明请求访问的资源被拒绝了

404 :请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。

500 :服务器内部错误。通常程序抛异常

 

4、ajax获取数据库数据

 (1)书写页面,通过AJAX向服务端发起POST请求,获取服务端的数据,将其转换为js对象后进行遍历渲染在页面上:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
     
head>
<body>
    <button id="btn">获取数据button>
    <div id="sp1">div>
    <script>
        var btn=document.getElementById("btn")
        var sp1=document.getElementById("sp1")
        btn.onclick=function(){
            var xhr=new XMLHttpRequest();
            xhr.open("POST",'phpinfo.php',true)
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send();
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&xhr.status==200)   
                var data=JSON.parse(xhr.responseText);
                var html="";
                for(var a in data) { 
                    html+=`
                    <tr>                        
                        <td>${data[a].Id}td>
                        <td>${data[a].sname}td>
                        <td>${data[a].sex}td>
                        <td>${data[a].snum}td>
                        <td>${data[a].hobby}td>
                    tr>`
                  } 
                 sp1.innerHTML=html; 
            }
            
        }
    script>
   
body>
html>

(2)PHP:创建并获取数据库连接,访问数据库,从数据库获取数据:

php 
header("Content-type:text/html;charset=utf-8");//字符编码设置 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "student"; 
 
$con =mysqli_connect($servername, $username, $password, $dbname); 

$sql = "SELECT * FROM t_stu"; 
$result = mysqli_query($con,$sql); 
if (!$result) {
    printf("Error: %s\n", mysqli_error($con));
    exit();
}
 
$jarr = array();
while ($rows=mysqli_fetch_array($result,MYSQL_ASSOC)){
    $count=count($rows);//不能在循环语句中,由于每次删除 row数组长度都减小 
    for($i=0;$i<$count;$i++){ 
        unset($rows[$i]);//删除冗余数据 
    }
    array_push($jarr,$rows);
}
echo $str=json_encode($jarr);//将数组进行json编码
?>

(3)创建数据库,存储数据:

 

 (4)测试

小程序:ajax(页面跳转方式、http、ajax的应用)_第9张图片

 

 

5、图灵机器人

(1)向接口发起ajax请求,获取服务端的数据:

调用接口的时候,需要输入相关的请求参数,通过查看API获取返回的数据中的信息

其中,data里面是请求参数

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js">script>
<title>   title>

<script>
    function formatterDateTime() {
                    var date=new Date()
                    var month=date.getMonth() + 1
                  var datetime = date.getFullYear()
                                + ""// "年"
                                + (month >= 10 ? month : "0"+ month)
                                + ""// "月"
                                + (date.getDate() < 10 ? "0" + date.getDate() : date
                                        .getDate())
                                + ""
                                + (date.getHours() < 10 ? "0" + date.getHours() : date
                                        .getHours())
                                + ""
                                + (date.getMinutes() < 10 ? "0" + date.getMinutes() : date
                                        .getMinutes())
                                + ""
                                + (date.getSeconds() < 10 ? "0" + date.getSeconds() : date
                                        .getSeconds());
                 return datetime;
    }
    
    var me=document.getElementById("me")
    function dianji() {        
    $.ajax({
        type: 'post',
        url: 'http://route.showapi.com/26-4',
        dataType: 'json',
        data: {
            "showapi_timestamp": formatterDateTime(), //注意要使用当前时间。服务器只处理时间误差10分钟以内的请求
            "showapi_appid": '281861', //这里需要改成自己的appid
            "showapi_sign": 'd8499e9ea1fd48469074de312a3a2ea1',  //这里需要改成自己的密钥
            "info":me
        },
        jsonp: 'jsonpcallback',
        error: function(XmlHttpRequest, textStatus, errorThrown) {
            alert("操作失败!");
        },
        success: function(result) {    
           alert(result.showapi_res_error)
        }
    });
}
>
head>

<body>    
     <input type="text" id="me" />
     <button onclick="dianji()">提交button>
body>

html>

(2)测试

小程序:ajax(页面跳转方式、http、ajax的应用)_第10张图片

 

 

6、小程序的渲染

(1)请求数据并书写相应的函数实现页面的切换:

Page({
  data: {
    tabList:["全部","精华","分享","问答","招聘"],
    currentIndex:0,
    lists:[]//用来存数据
  },
  tabChange(e){
    this.setData({
        currentIndex:e.currentTarget.dataset.num
    })
    console.log(this.data.currentIndex)
    if(this.data.currentIndex==0){
      this.getLists("all");
    }else if(this.data.currentIndex==1){
      this.getLists("good");
    }else if(this.data.currentIndex==2){
      this.getLists("share");
    }else if(this.data.currentIndex==3){
      this.getLists("ask");
    }else{
      this.getLists("job");
    }
    
  },
  //获取后台数据
  getLists(e){
    var that = this
    console.log(e)
    wx.showLoading({
      title: '正在加载中',
    })
    wx.request({
      url:"https://cnodejs.org/api/v1/topics",
      data:{
        tab:e
      },
      method:"GET",
      success:function(res){
        console.log(that)
        that.setData({
          lists:res.data.data
        })
        // ,function(){
          wx.hideLoading({})
        // }
        console.log(that.data.lists)
      },
      fail:function(error){
        console.log(error)
      }
    })
  },
  //事件处理函数
  bindViewTap: function() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad: function () {
    this.getLists("all");
  },
  getUserInfo: function(e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

(2)样式:布局页面

/**index.wxss**/
.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.userinfo-avatar {
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.userinfo-nickname {
  color: #aaa;
}

.usermotto {
  margin-top: 200px;
}

.tab{
  font-size: 32rpx ;
  color:#86C811 ;
}
.current{
  color:#fff;
  background-color:#86C811;
  padding:6rpx 8rpx;
}
.main{
  width:95%;
  background-color:■#ffffff;
  margin:40rpx auto;
  border-radius:6rpx 6rpx 0 0;
  font-size:28rpx;
}
.header{
  width:100%;
  height:120rpx;
  background-color:#DDDDDD;
  display:flex;
  align-items:center;
  justify-content:space-around;
  font-size:32rpx;
}
.content{
  border-radius: 0 0 6rpx 6rpx;
  background-color: #ffffff;
}

.topic_list{
  width: 100%;
  height:100rpx;
  border-radius: 1px solid #DDDDDD;
  color: #888;
  padding: 20rpx;
  box-sizing: border-box;
  position: relative;
}
.topic_list image{
  width: 60rpx;
  height: 60rpx;
  vertical-align: middle;
  
}
.put-top{
  font-size: 24rpx;
  color: #fff;
  background-color: #86c011;
  padding: 6rpx;
  border-radius: 4rpx;
  margin: 0 20rpx 0 10rpx;
  
}

.titles{
  font-size: 28rpx;
  display: inline-block;
  width: 450rpx;
  height: 50rpx;
  vertical-align: middle;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
 
}
.topic_list_bottom{
  font-size: 24rpx;
  color: #b4b4b4;
}
.reply_count{
  position: absolute;
  left: 165rpx;
  bottom: 5rpx;
}
.last_active_time{
  position: absolute;
  right: 165rpx;
  bottom: 5rpx;
}

(3)获取数据渲染页面

<view class="main">
  <view class="header">
    <block wx:for="{{tabList}}" >
        <view class="tab {{currentIndex==index?'current':''}}" bindtap="tabChange" data-num="{{index}}">
{{item}}view>
      block>
  view>
  <view class="content">
    <navigator class="topic_list" wx:for="{{lists}}" wx:key="index">
      <view class="topic_list_bottom">
        <image src="{{item.author.avatar_url}}">image>
        <text class="put-top" wx:if="{{item.top}}">置顶text>
        <text class="put-top" wx:else>{{
            item.tab=="share"?"分享":item.tab=="good"?"精华":item.tab=="ask"?"问答":"招聘"}}text>
        <text class="titles">{{item.title}}text>
      view>
      <view class="topic_list_bottom">
        <view class="reply_count">
          <text>{{item.reply_count}}text>
          <text>/text>
          <text>{{item.visit_count}}text>
        view>
        <text class="last_active_time">10天前text>
      view>

    navigator>
  view>
view>

(4)测试:

小程序:ajax(页面跳转方式、http、ajax的应用)_第11张图片

 

 小程序:ajax(页面跳转方式、http、ajax的应用)_第12张图片

 

你可能感兴趣的:(小程序:ajax(页面跳转方式、http、ajax的应用))