PHP与Ajax的梳理

一、PHP的安装

01:安装: wampserver集成环境
02:如何知道自己安装好了:--在浏览器输入 http://localhost  出现页面便代表安装成功
03:修改端口号--- Apache - httpd.conf(这个文件) - ctrl+H(查找80就好)---然后修改自己想要的端口号(比如8080)-最后重启(Restart All service)
04:配置多个站点
第一步: Apache - httpd.conf(这个文件)--- ctrl+H寻找httpd-vhosts  修改  Include conf/extra/httpd-vhosts.conf 把前面的#去掉(若是没有就不用修改)---- ctrl+H寻找online   然后#   onlineoffline tag - don't remove 下面添加以以下的代码---    Require local   Require local Oeder Deny,Allow
    Allow form all
    
注意点;若是添加了Require local   Oeder Deny,Allow   Allow form all 后重启是橙色的话,则需要把Require local   Oeder Deny,Allow   Allow form all这三行代码换做下面的两行代码   Require all granted  Require host ip
第二步: Apache - httpd.vhosts.conf(这个文件)
原先只有以下代码:
# Virtual Hosts
#
<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Require local
  </Directory>
</VirtualHost>

然后啊-就复制上面一段代码,并且添加监听  listen 1905(1905为端口号),还有修改路径(文件路径,不能出现空格和中文)
listen 1905
<VirtualHost *:1905>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "C:\Users\Administrator\Desktop\ajax"
  <Directory "C:\Users\Administrator\Desktop\ajax">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    #Require local
    Require all granted
  </Directory>
</VirtualHost>

ajax

(1):ajax的运用

ajax的应用:能够实现局部数据的实时更新的;
有着以下很多应用---百度搜索关键字,导航,翻页、懒加载(上拉,加载更多)等等作用

(2):ajax的代码

(1):ajax的步骤

HTML:
		 用户名:<input type="text" id="name" value=""><span id="inf"></span><br />
		    <input type="button" value="注册">
		    
ajax请求分为四步:
第一步:告诉ajax你要做什么?
	首先创建一个XMLHttpRequest对象进行http通信,然后利用open()方法,告诉ajax你需要利用什么方式(get/post),路径(处理的数据文件php或者json),是否异步(一般为true)?
(“GET”方式的安全性比“POST”的要低,包含机密信息的话,建议用post数据提交方式;在做数据查询是,建议用“GET”方式,而在做数据添加、修改、删除时,建议用“POST”方式 ) 
	 let xhr = new XMLHttpRequest();
	 var data = 'time=' + new Date() + '&name=' + txtVal;(时间戳,为了防止同时请求同一资源,发生缓存)
     xhr.open('get', 'api/02checkName.php?' + data, true);
第二步:ajax帮你发生请求
	  xhr.send(null); //2,ajax发送数据
第三步:后端数据处理,调用接口 php或者json文件
	前端用什么请求,就用什么请求获得数据,但是这边需要先拿到数据后,echo 输出一下,以免出错,再写后面的逻辑。
	<?php 
	    //接受前端传递的数据,判断用户名是否存在,返回是否存在的标志
	    //isset()方法,判断是否传递值过来了
	    // $name = $_GET['name'];  //
	    $name = isset($_GET['name'])? $_GET['name'] : "";
	    //前端有那个什么方式获取数据,就用什么方式接受数据
	    // echo $name;//拿到数据,马上给前端,验证是否成功
	    $arr = array('andy','pink','blue','yellow'); //假数据
	    // in_array() 函数搜索数组中是否存在指定的值。第一个参数为查询的值,第二个为数组
	    if(in_array($name,$arr)){ //如果有这个值,证明不可以被注册,返回的是0
	        echo '0';
	    }else{
	        echo '1';
	    }
    ?>
第四步:调用接口,渲染数据
	当请求被发送到服务器时,我们需要执行一些基于响应的任务。
	每当 readyState 改变时,就会触发 onreadystatechange 事件。
	readyState 属性存有 XMLHttpRequest 的状态信息。(4: 请求已完成,且响应已就绪)
	status(状态)里面--(200: "OK"      404: 未找到页面);
	注意点:xhr.responseText ---这个是ajax提交请求后,处理结束后,返回一串数据给前端,返回值一般是0或者1(0代表失败,1代表成功)
	                xhr.onreadystatechange = () => {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var str = xhr.responseText;
                        // console.log(str);
                        if (str == '1') {
                            inf.innerHTML = '用户名可以注册';
                            inf.style.color = '#58bc58';
                        } else {
                            inf.innerHTML = '该用户名太受欢迎了';
                            inf.style.color = 'red';
                        }
                    }
                }

(2):ajax的post请求

HTML:
	用户名:<input type="text" id="name" value=""><span id="inf"></span><br />
    <input type="button" value="注册">

PHP:
	<?php 
    //接受前端传递的数据,判断用户名是否存在,返回是否存在的标志
    //isset()方法,判断是否传递值过来了
    $name = isset($_POST['name']) ? $_POST['name'] : '';//前端有那个什么方式获取数据,就用什么方式接受数据
    // echo $name;//拿到数据,马上给前端,验证是否成功
    $arr = array('andy','pink','blue','yellow');
    if(in_array($name,$arr)){
        // 存在,不给注册
        echo '0';
    }else{
        // 存在,给注册
        echo '1';
    }
?>
JS:
 (function () {
        let name = document.getElementById('name');
        let inf = document.getElementById('inf');
        // 失去焦点的时候就验证, 用户名是否存在
        name.onblur = () => {
            let txtVal = name.value.trim();
            let reg = /^[a-zA-Z0-9_-]{3,8}$/;
            if (reg.test(txtVal)) {
                //非空 
                //url?name=pink&&age=19
                let xhr = new XMLHttpRequest();
                var data = '&name=' + txtVal;
                xhr.open('post', 'api/04check-post.php?time=' + new Date(), true);
                // 注意点:post发送需要设置头信息
                xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
                xhr.send(data); //2
                xhr.onreadystatechange = () => {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var str = xhr.responseText;
                        // console.log(str);
                        if (str == 'yes') {
                            inf.innerHTML = '用户名可以注册';
                            inf.style.color = '#58bc58';
                        } else {
                            inf.innerHTML = '该用户名太受欢迎了';
                            inf.style.color = 'red';
                        }
                    }
                }
            } else {
                inf.innerHTML = '请输入3到8为的用户名';
            }
        };

    })();

(3):ajax的伪jq封装函数

JS:
  // 封装ajax 方案2
  function ajax2(opt) { 
      function extend(obj1, obj2) {  //配置参数obj2,若是有配置参数,则优先利用配置参数 
          for (var key in obj2) {
              obj1[key] = obj2[key];
          }
      }

      //默认参数
      var defaults = {
          async: true
      }

      //后面是有默认参数
      extend(defaults, opt);

      var xhr = new XMLHttpRequest();
      if (defaults.type.toLowerCase() == 'get') {
          //get请求
          if (defaults.data) {
              defaults.url += '?' + defaults.data;
          }
          xhr.open(defaults.type, defaults.url, defaults.async);
          xhr.send(null);
      } else {
          //post请求
          xhr.open(defaults.type, defaults.url, defaults.async);
          xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); // 注意点:post发送需要设置头信息
          xhr.send(defaults.data);
      }
      //返回接受的数据
      xhr.onreadystatechange = () => {
          if (xhr.readyState == 4) {
              if (xhr.status == 200) {
                  if (defaults.success) { //如果有数据就返回
                      defaults.success(xhr.responseText);
                  }
              } else {
                  alert('错误http状态码:' + xhr.status);
              }
          }
      }
  }

注意点:调用该ajax2({})方法:
里面有着四个参数,第一个参数type: 类型;第二个参数url:路径;第三个参数data:数据;第四个参数success:回调函数function (str) { 里面写逻辑或者样式等 }
 // 调用函数
    (function () {
        let name = document.getElementById('name');
        let inf = document.getElementById('inf');
        // 失去焦点的时候就验证, 用户名是否存在
        name.onblur = () => {
            let username = name.value.trim();
            if (username) {
                // 非空,就发生ajax请求
                ajax2({
                    type: 'get',
                    url: 'api/02checkName.php',
                    data: 'name=' + username,
                    success: function (str) {
                        //console.log(str);
                        if (str == '1') {
                            inf.innerHTML = '用户名可以注册';
                            inf.style.color = '#58bc58';
                        } else {
                            inf.innerHTML = '用户名已经被注册了';
                            inf.style.color = 'red';
                        }
                    }
                })
            } else {
                inf.innerHTML = '请输入用户名';
                inf.style.color = 'red';
            }
        }
    })();
发布了8 篇原创文章 · 获赞 1 · 访问量 177

猜你喜欢

转载自blog.csdn.net/weixin_43845137/article/details/104823229