PHP-PHP与AJAX

PHP与AJAX

一、传统Web应用–重新加载整个页面 - 不友好

<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>AJAX Example</title>
</head>

<body>
  <form action="">
    学号:<input type="text" name="XH" size="12">
    课程名:<input type="text" name="KCM" size="12">
    <input type="submit" value="查询" name="bt1"><br>
    成绩:<input type="text" name="CJ" size="12" id="CJ">
  </form>
  <?php
      if(isset($_GET['bt1'])){
        $XH=$_GET['XH'];                //取得XH的值
        $KCM=$_GET['KCM'];        //取得KCM的值
        $conn=mysqli_connect("localhost","root","");  //连接MySQL服务器
        mysqli_select_db($conn, "PXSCJ");      //选择PXSCJ数据库
        mysqli_query($conn, "SET NAMES utf8mb4");    //将MySQL字符集设为gb2312

        $sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
        $result=mysqli_query($conn, $sql);                      //执行SQL语句$sql
        $row=mysqli_fetch_array($result);
        if($row)
          echo "<script> document.getElementById('CJ').value = $row[0]; </script>" ; //嵌入JS在'CJ'输出成绩
        else
          echo "<script> document.getElementById('CJ').value= '".'无此成绩'."' ;   </script>" ; 
      }
   ?>
</body>

</html>

在这里插入图片描述
点击查询按钮后页面会闪一下——不友好。

二、使用GET方式实现一个简单的服务器请求,通过输入学生学号和课程名,查看学生的成绩-- GET方式的PHP与AJAX交互

  • SY10_2_main.php:
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>AJAX Example</title>
  <script>
    function GetXmlHttpObject(){              //不同的浏览器使用不同的方法
      var XMLHttp=null;                       //来创建XMLHttpRequest对象
      try { 
        XMLHttp=new XMLHttpRequest(); 
        }                                //NetScape等浏览器
      catch(e){ 
        try { 
          XMLHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
          }       //IE6以上版本浏览器
        catch(e){ 
          XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");}
        }
      return XMLHttp;
    }
    function cj_query(){
      XMLHttp=GetXmlHttpObject();                   
      //调用函数GetXmlHttpObject()初始化XMLHttpRequest
      var XH=document.getElementById("XH").value;         
      //getElementById()返回指定ID的第一个对象的引用
      var KCM=document.getElementById("KCM").value;
      var url="SY10_2_process.php";             //服务器端在SY10_2_process.php中处理
      url=url+"?XH="+XH+"&KCM="+KCM;              //url地址-以GET方式传递
      url=url+"&sid="+Math.random();                    
      //添加一个随机数,以防服务器使用缓存的文件
      XMLHttp.open("GET", url, true);              
      //以GET方式通过给定的url打开XMLHTTP对象
      XMLHttp.send(null);        //向服务器发送HTTP请求-请求内容为空(参数已在url中)
      XMLHttp.onreadystatechange = function(){                
      //定义响应处理函数--JS即时定义函数的方法
        if(XMLHttp.readyState==4&&XMLHttp.status==200){                
        //readyState为4--已经传回了所以
          document.getElementById("CJ").value=XMLHttp.responseText;   
          //信息-可以开始处理--更新页面了  
        }                                                             
         //innerHTML属性--获取对象的内容
      }                                                                
      //或向对象插入内容 
    }                                                                  
    //传回的信息--当字符串使用  
  </script>
</head>

<body>
  <form action="">
    学号:<input type="text" name="XH" size="12" id="XH">
    课程名:<input type="text" name="KCM" size="12" id="KCM">
    <input type="button" value="查询" onclick="cj_query()"><br> 
    <!-- //单击"查询"按钮 调用cj_query函数 -->
    成绩:<input type="text" name="CJ" size="12" id="CJ">
  </form>
</body>

</html>
  • SY10_2_process.php:
<?php
  $XH=$_GET['XH'];  			                //取得XH的值
  $KCM=$_GET['KCM'];					//取得KCM的值-不会出现编码(乱码)问题
  header('Content-Type:text/html;charset=utf-8');	//发送header-将编码设为gb2312
  $conn=mysqli_connect("localhost","root","");	//连接MySQL服务器
  mysqli_select_db($conn, "PXSCJ");			//选择PXSCJ数据库
  mysqli_query($conn, "set names utf8mb4");			//将mysql字符集设为gb2312

  $sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
  $result=mysqli_query($conn, $sql);
  $row=mysqli_fetch_array($result);                      //从结果集中逐行获取记录
  if($row)
    echo $row['成绩'];		                //输出课程成绩到请求端
  else
    echo "无此成绩";
?>

在这里插入图片描述
点击查询按钮,页面不会有刷新感——友好。

三、使用POST方式实现第二题-- POST方式的PHP与AJAX交互

  • SY10_3_main_post.php:
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <title>AJAX Example</title>
  <script>
    function GetXmlHttpObject(){              //不同的浏览器使用不同的方法
      var XMLHttp=null;                       //来创建XMLHttpRequest对象
      try { 
        XMLHttp=new XMLHttpRequest(); 
      }                                
      //NetScape等浏览器
      catch(e){ 
        try { 
          XMLHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
        }       
        //IE6以上版本浏览器
        catch(e){ 
          XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      return XMLHttp;
    }
    function cj_query(){
      XMLHttp=GetXmlHttpObject();                   
      //调用函数GetXmlHttpObject()初始化XMLHttpRequest
      var XH=document.getElementById("XH").value;         
      //getElementById()返回指定ID的第一个对象的引用
      var KCM=document.getElementById("KCM").value;
      var url="SY10_3_process_post.php";          
      //服务器端在SY10_3_process_post.php中处理
      var poststr="XH="+XH+"&KCM="+KCM;            //要传的参数-以post方式传递
       
      XMLHttp.open("POST", url, true);              
      //以POST方式通过给定的url打开XMLHTTP对象
      XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  //设置头信息
      XMLHttp.send(poststr);                    //向服务器发送HTTP请求(内容-参数)
      XMLHttp.onreadystatechange = function(){                
      //定义响应处理函数--JS即时定义函数的方法
        if(XMLHttp.readyState==4&&XMLHttp.status==200){                
        //readyState为4--已经传回了所以
          document.getElementById("CJ").value=XMLHttp.responseText;   
          //信息-可以开始处理--更新页面了  
        }                                                              
        //innerHTML属性--获取对象的内容
      }                                                                
      //或向对象插入内容 
    }                                                          
    //XMLHttp.responseText--传回的信息--当字符串使用  
  </script>
</head>

<body>
  <form action="">
    学号:<input type="text" name="XH" size="12" id="XH">
    课程名:<input type="text" name="KCM" size="12" id="KCM">
    <input type="button" value="查询" onclick="cj_query();"><br>
    成绩:<input type="text" name="CJ" size="12" id="CJ">
  </form>
</body>

</html>
  • SY10_3_process_post.php:
<?php
  $XH=$_POST['XH'];  			                //取得XH的值
  //$KCM=$_POST['KCM'];					//取得KCM的值-会出现编码(乱码)问题
  $KCM=$_POST['KCM'];           //将UTF-8转换成gb2312字符集
  header('Content-Type:text/html;charset=utf-8');	//发送header-将编码设为gb2312
  $conn=mysqli_connect("localhost","root","");	//连接MySQL服务器
  mysqli_select_db($conn, "PXSCJ");			//选择PXSCJ数据库
  mysqli_query($conn, "SET NAMES utf8mb4");			//将字符集设为gb2312

  $sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
  $result=mysqli_query($conn, $sql);                             //执行SQL语句$sql
  $row=mysqli_fetch_array($result);
  if($row)
    echo $row['成绩'];			                //输出课程成绩到请求端
  else
    echo "无此成绩";
?>

在这里插入图片描述
点击查询按钮,页面不会有刷新感。

四、要添加一个学生的信息,用户输入学号,使用无刷新技术判断学号是否存在并输出提示

  • SY10_4_main.php:
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>AJAX Example2</title>
  <script>
    function GetXmlHttpObject() {
      var XMLHttp=null;
      try{ 
        XMLHttp=new XMLHttpRequest(); 
      }
      catch(e){ 
        try{ 
          XMLHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
        }
        catch(e){ 
          XMLHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        }
      }
      return XMLHttp;
    }
    function run(){
      XMLHttp=GetXmlHttpObject();
      var XH=document.getElementById("XH").value;   //得到“学号”文本框中输入的值
      var XM=document.getElementById("XM").value;   //得到“姓名”文本框中输入的值
      var url="SY10_4_process.php";       //服务器端在SY10_4_process.php中处理
      var poststr="XH="+XH+"&XM="+XM;         //url地址,以POST方式传递
      XMLHttp.open("POST",url,true);             //以POST方式打开XMLHTTP对象 
      XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置头信息
      XMLHttp.send(poststr);                 //向服务器发送HTTP请求(内容-参数)
      XMLHttp.onreadystatechange = function(){     //定义响应处理函数
        if(XMLHttp.readyState==4&&XMLHttp.status==200){ 
          if(XH==""){ window.alert("学号未填"); }
          else{ 
            if(XMLHttp.responseText == "1"){ 
              document.getElementById("txthint").innerHTML="学号已存在"; 
            }
            else if(XMLHttp.responseText == "0"){ 
              document.getElementById("txthint").innerHTML="学号未被使用"; 
            }
          }
        }
      }
    }
  </script>
</head>

<body>
  <form>
    <table bgcolor="#CCCCCC" width="280" border="1" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td width="90">学号:</td>
        <td><input type="text" name="XH" id="XH" size="15">
          <input type="button" name="select" value="检测" onclick="run();"></td>
      </tr>
      <tr>
        <td bgcolor="#CCCCCC" width="90">姓名:</td>
        <td><input name="XM" type="text" size="15" id="XM"></td>
      </tr>
      <tr>
        <td>性别:</td>
        <td><input type="radio" name="XB" value="1"><input type="radio" name="XB" value="0"></td>
      </tr>
      <tr>
        <td align="center" colspan="2"><input type="submit" name="cmdINSERT" value="添加"></td>
      </tr>
    </table>
  </form>
  <font color="red">
    <div id="txthint" align="center"></div>
  </font> <!-- 设置id为"txthint"的div标记,用于显示返回信息 -->
</body>

</html>
  • SY10_4_process.php:
<?php
   $XH=$_POST['XH'];
   $XM=$_POST['XM'];
   header('Content-Type:text/html;charset=utf-8');	
   //发送header-将浏览器编码设为gb2312
   $conn=mysqli_connect("localhost","root","");	//连接MySQL服务器
   mysqli_select_db($conn, "PXSCJ");			//选择PXSCJ数据库
   mysqli_query($conn, "set names utf8mb4");			//将mysql字符集设为gb2312
   $sql="select * from XSB where 学号='$XH'";		//查询语句
   $result=mysqli_query($conn, $sql);
   $row=mysqli_fetch_array($result);                     //从结果集中逐行获取记录
   if($row)
     echo "1";
   else
     echo "0";
?>

在这里插入图片描述
在这里插入图片描述
点击检测,不会有页面的属性感,会直接提示相应的结果。

创作不易,喜欢的话加个关注点个赞,蟹蟹蟹蟹! 顺祝大家中秋节快乐,阖家幸福,万事如意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值