路漫漫其修远兮:js的成长经历(十六)—— jQuery中的Ajax

本地服务器软件的安装

安装一个软件:wampserver3.0.6_x64.exe
https://www.cr173.com/soft/259379.html
将路径设置好,默认安装在c盘,在安装路径中不允许出现中文
一直点击下一步,知道最后会弹出文件选项,选择你默认的打开的浏览器,一般选择Chrome
安装好之后,桌面上会出现这个图标在这里插入图片描述
点击打开,右下角会出现这个后台服务在这里插入图片描述
如果显示红色和黄色,则本地服务器有问题,路路径对,或者本地网络端口号和服务器端口号不匹配,显示绿色,本地服务器才可以使用,在本地网络中,可以用本地网络进行访问
(ps:如果需要外网也可以访问,则可以了解一下花生壳)
安装好软件之后,在安装目录下有一个叫www的目录,
里面如果有叫index.html的文件,则当本地访问该服务器是,默认显示index.html的网页。如果没有,则网络会直接访问该www的文件夹,
学习Ajax是需要用到网络访问数据,所以文件需要放到www这个文件夹中。

php基础

0.php文件的格式

<?php
//中间放内容
?>

1.php中有两种注释
1.1单行注释
//
1.2多行注释
/* */
2.如何定义变量?
$num = 10;
3.如何打印内容?
echo $num;
echo “
”; //换行
(注意点: 后端编写的代码不能直接运行, 只能放到服务器对应的文件夹下, 通过服务器运行
如何通过服务器运行: 通过ip地址找到服务器对应的文件夹, 然后再找到对应的文件运行)
如图所示
在这里插入图片描述
在这里插入图片描述

4.如何定义集合
4.1数组
a r r = a r r a y ( 1 , 3 , 5 ) ; p r i n t r ( arr = array(1, 3, 5); print_r( arr=array(1,3,5);printr(arr);//打印集合的方法
echo “
”;
echo $arr[1];、、打印某个元素
4.2字典(对象)
d i c t = a r r a y ( &quot; n a m e &quot; = &gt; &quot; N i c k &quot; , &quot; a g e &quot; = &gt; &quot; 19 &quot; ) ; p r i n t r ( dict = array(&quot;name&quot;=&gt;&quot;Nick&quot;, &quot;age&quot;=&gt;&quot;19&quot;); print_r( dict=array("name"=>"Nick","age"=>"19");printr(dict);
echo “
”;
echo $dict[“name”];
5.分支循环语句
5.1.判断
a g e = 17 ; i f ( age=17; if( age=17;if(age >= 18){
echo “成年人”;
}else{
echo “未成年人”;
}
5.2.三目运算
r e s = ( res = ( res=(age >= 18) ? “成年人” : “未成年人”;
5.3 switch判断
switch ($age){
case -1:
echo “非人类”;
break;
case 18:
echo “成年人”;
break;
default:
echo “未成年人”;
break;
}
6.循环
a r r = a r r a y ( 1 , 3 , 5 ) ; f o r ( arr = array(1, 3, 5); for( arr=array(1,3,5);for(i = 0; i &lt; c o u n t ( i &lt; count( i<count(arr); $i++){
echo a r r [ arr[ arr[i];
echo “
”;
}
i n d e x = 0 ; w h i l e ( index = 0; while ( index=0;while(index < count($arr)){
echo a r r [ arr[ arr[index];
echo “
”;
$index++;
}

jQuery中的Ajax

GET请求和POST请求的异同

相同点:
都是将数据提交到远程服务器
不同点:
1.提交数据存储的位置不同
GET请求会将数据放到URL后面
POST请求会将数据放到请求头中
2.提交数据大小限制不同
GET请求对数据有大小限制
POST请求对数据没有大小限制

上传文件

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>03-post-file</title>
</head>
<body>
<!--
注意:  服务端不支持中文,不然会乱码
1.上传文件一般使用POST提交
2.上传文件必须设置enctype="multipart/form-data"

3.上传的文件在PHP中可以通过$_FILES获取
4.PHP中文件默认会上传到一个临时目录, 接收完毕之后会自动删除
5.如果想要上传接收到某一个路径下,可以使用move_uploaded_file来将临时文件移动到永久文件夹中
-->
<!--
默认情况下服务器对上传文件的大小是有限制的, 如果想修改上传文件的限制可以修改php.ini文件
file_uploads = On   ; 是否允许上传文件 On/Off 默认是On
upload_max_filesize = 2048M       ; 上传文件的最大限制
post_max_size = 2048M             ; 通过Post提交的最多数据

max_execution_time = 30000      ; 脚本最长的执行时间 单位为秒
max_input_time = 30000          ; 接收提交的数据的时间限制 单位为秒
memory_limit = 2048M            ; 最大的内存消耗
-->
<form action="03-post-file.php" method="post" enctype="multipart/form-data">
    <input type="file" name="upFile"><br>
    <input type="submit" value="上传"><br>
</form>
</body>
</html>

php处理代码

<?php
// echo "post page";
// print_r($_POST);
// echo "<br>";
// print_r($_FILES);

// 1.获取上传文件对应的字典
$fileInfo = $_FILES["upFile"];
print_r($fileInfo);
echo "<br>";
// 2.获取上传文件的名称
$fileName = $fileInfo["name"];
// 3.获取上传文件保存的临时路径
$filePath = $fileInfo["tmp_name"];

echo $fileName;
echo "<br>";
echo $filePath;

// 4.移动文件(用点来拼接字符串)
move_uploaded_file($filePath, "./source/".$fileName);
?>

封装jQuery中的Ajax

1.创建一个异步对象
需要兼容浏览器

if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

2.设置请求方式和请求地址
xmlhttp.open(method, url,async);
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
(注意:需要在url中加入一个时间戳,来进行实时更新)
3.发送请求
xmlhttp.send();
4.监听状态的变化
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
5.处理返回的结果(返回对象)

需要注意的地方:
1.在封装ajax时传入一个伪数组对象
2.如果有传入数据,需要将数据中的对象转化为数组的形式
3.在URL中是不可以出现中文的, 如果出现了中文需要转码,可以调用encodeURIComponent方法
4.需要区别发送的是get请求还是post请求
如果是get请求会将提交的数据拼接到URL后面
?userName=lnj&userPwd=123456
如果是post请求会将提交的数据放到请求头中
5.需要写一个方法来判断请求是否阐释
如果超时用xmlhttp.abort();来中断请求

具体封装代码如下

function obj2str(data) {
    /*
    {
        "userName":"lnj",
        "userPwd":"123456",
        "t":"3712i9471329876498132"
    }
    */
    data = data || {}; // 如果没有传参, 为了添加随机因子,必须自己创建一个对象,当前时间
    data.t = new Date().getTime();
    var res = [];
    for(var key in data){
        // 在URL中是不可以出现中文的, 如果出现了中文需要转码
        // 可以调用encodeURIComponent方法
        // URL中只可以出现字母/数字/下划线/ASCII码
        res.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key])); // [userName=lnj, userPwd=123456];
    }
    return res.join("&"); // userName=lnj&userPwd=123456
}
function ajax(option) {//option是一个对象
    // 0.将对象转换为字符串
    var str = obj2str(option.data); // key=value&key=value;
    // 1.创建一个异步对象
    var xmlhttp, timer;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 2.设置请求方式和请求地址
    /*
    method:请求的类型;GET 或 POST
    url:文件在服务器上的位置
    async:true(异步)或 false(同步)
    */
    if(option.type.toLowerCase() === "get"){
		//str是一个时间戳
        xmlhttp.open(option.type, option.url+"?"+str, true);
        // 3.发送请求
        xmlhttp.send();
    }else{
        xmlhttp.open(option.type, option.url,true);
        // 注意点: 以下代码必须放到open和send之间
		//如果是post请求会将提交的数据放到请求头中
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send(str);
    }

    // 4.监听状态的变化
    xmlhttp.onreadystatechange = function (ev2) {
        /*
        0: 请求未初始化
        1: 服务器连接已建立
        2: 请求已接收
        3: 请求处理中
        4: 请求已完成,且响应已就绪
        */
        if(xmlhttp.readyState === 4){
            clearInterval(timer);
            // 判断是否请求成功
            if(xmlhttp.status >= 200 && xmlhttp.status < 300 ||
                xmlhttp.status === 304){
                // 5.处理返回的结果
                // console.log("接收到服务器返回的数据");
				//返回xmlhttp这个异步对象,在执行函数时,可以用这个异步对象获取请求到的数据
                option.success(xmlhttp);
            }else{
                // console.log("没有接收到服务器返回的数据");
                option.error(xmlhttp);
            }
        }
    }
    // 判断外界是否传入了超时时间
    if(option.timeout){
        timer = setInterval(function () {
            console.log("中断请求");
            xmlhttp.abort();
            clearInterval(timer);
        }, option.timeout);
    }
}

xml基础

xml文件和html文件很像,格式有所区别,但主要都是用标签来写代码,区别就是html是展示页面的文件。而xml是储存数据的文件,xml属于后端。
xml文件样例:

<?xml version="1.0" encoding="UTF-8" ?>
<person>
    <name>Nick</name>
    <age>20</age>
</person>

如何实现用xml来数据交换呢
1.在html用ajax发送请求,请求路径为php文件
2.在php文件中输出为获取文件,获取的文件时xml文件
3.在xml文件边写相关的数据代码
代码实现如下
1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>11-ajax-xml</title>
    <script src="myAjax2.js"></script>
    <script>
        window.onload = function (ev) {

            var oBtn = document.querySelector("button");
            oBtn.onclick = function (ev1) {
                ajax({
                    type:"get",
                    url:"11-ajax-xml.php",
                    success: function (xhr) {
                        // console.log(xhr.responseXML);
                        // console.log(document);
                        var res = xhr.responseXML;
                        console.log(res.querySelector("name").innerHTML);
                        console.log(res.querySelector("age").innerHTML);
                    },
                    error: function (xhr) {
                        console.log(xhr.status);
                    }
                })
            }
        }
    </script>
</head>
<body>
<button>发送请求</button>
</body>
</html>

2.php

<?php
// 执行结果中有中文, 必须在php文件顶部设置
//header("content-type:text/html; charset=utf-8");
// 如果PHP中需要返回XML数据, 也必须在PHP文件顶部设置
header("content-type:text/xml; charset=utf-8");

echo file_get_contents("info.xml");

3.xml

<?xml version="1.0" encoding="UTF-8" ?>
<person>
    <name>Nick</name>
    <age>20</age>
</person>

这样既可以实现xml文件的数据交换,可以获取xml中的数据实现网页更新

json基础

JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。
通俗的来说json是一种数据格式,很像js中的伪数组,它每一个对象的值可以是一个新的对象
例如

{
  "skillz": {
    "web": [ 
      {
        "name": "html""years": "5"
      }{
        "name": "css""years": "3" 
      }
    ],
    "database": [
      {
        "name": "sql""years": "7" 
      }
    ]
  }
}

如何实现用json来数据交换呢
1.在html用ajax发送请求,请求路径为php文件
2.在php文件中输出为获取文件,获取的文件时json文件
3.在json文件边写相关的数据代码
代码实现如下
1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>12-ajax-json</title>
    <script src="myAjax2.js"></script>
    <script>
        window.onload = function (ev) {

            var oBtn = document.querySelector("button");
            oBtn.onclick = function (ev1) {
                ajax({
                    type:"get",
                    url:"12-ajax-json.php",
                    success: function (xhr) {
                        // console.log(xhr.responseText);
                        var str = xhr.responseText;
                        /*
                        在低版本的IE中, 不可以使用原生的JSON.parse方法, 但是可以使用json2.js这个框架来兼容
                        */
                        var obj = JSON.parse(str);
                        // console.log(obj);
                        console.log(obj.name);
                        console.log(obj.age);
                    },
                    error: function (xhr) {
                        console.log(xhr.status);
                    }
                })
            }
        }
    </script>
</head>
<body>
<button>发送请求</button>
</body>
</html>

2.php

<?php

echo file_get_contents("12-ajax-json.txt");

3.json

{
    "name":"Nick",
    "age":"20"
}

这样既可以实现json文件的数据交换,可以获取json中的数据实现网页更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿意做鱼的小鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值