Ajax

在这里插入图片描述

创建Ajax对象
Ajax的核心就是js的XMLHttpRequest对象
IE6/7/8

var request=new ActiveXObject(“Microsoft.XMLHTTP”);
var request=new ActiveXObject(“Msxml2.XMLHTTP”);
var request=new ActiveXObject(“Msxml2.XMLHTTP.3.0”);
var request=new ActiveXObject(“Msxml2.XMLHTTP.6.0”);
var req=’’;
if(window.XMLHttpRequest)
{
Req=new XMLHttpRequest();

}
else
{
   Req=new ActiveXObject(“Msxml2.HTTP”);//四种都可以
}

这里用php与ajax进行数据传输
Php

//设置编码格式
<?php
header('content-type:text/html;charset=utf-8');
$name='wujing';//定义
echo '<br>';//换行
$ip=3.14;
$male=false;
//选择语句
$day='礼拜一';
switch($day){
    case '礼拜一':
    break;
}
//循环语句
for($i=0;$i<10;$i++){

}
//定义数组
$food=array('a,c,f,b');
print_r($food);//输出数组内容
count($food)//获取数组长度
//数组遍历
for($i=0;$i<count($food);$i++){
    echo $food[$i];
}
//另一种数组-索引数组
$person=array('name'=>'eujing','film'=>'jdfd');
echo $person['name'];
//完整输出数组
print_r($person);
//遍历
foreach($person as $Key=>$value){
    echo $Key.'.....'.$value.'<br>';
}
//二维数组
$arr=array(
    array('name'=>'dsf','film'=>'sfds'),
    array('name'=>'dsf','film'=>'sfds'),
    array('name'=>'dsf','film'=>'sfds'),
)
echo '<h2>明星:<span style="color:orange;font-size:14px;>'.$arr[$i]['name'].'</span>出演了:'.$arr[$i['film'].'好朋友是:'.$arr[$i]['frient'].'<br></h2>';
//动态的写在里边 静态的写在外边
?>
<a href="#">dhgfhj</a>
<p>写在php标签之外的代码 不会执行 原封不动的返回浏览器</p>

<style>

</style>

Form表单通过get 提交的数据本质上在url后拼接上name=valve
?key=value
Php可以拆分多个,<?php ?>之间可以插入html
有form表单时需要用name属性
XMLHttpRequest对象回调函数->Mozilla开发者网络搜(XMLHttpRequest)搜onload
onreadystatechange//触发次数多,状态改变时会触发

xml缺点

  1. 传输数据量大
  2. 解析略微有点复杂
    获取网络数据
    1, 找到使用AJAX的网站(基本上都有)
    2, 如何查看网站使用的AJAX请求
    开发者界面
    Network选XHR选项
    3, 找到数据之后如何复制自己玩
    如果数据需要JSON格式化下载PE助手里的JSON格式化,或直接在百度搜JSON格式化在线格式(校验)
    4, 将数据放入到data/info.json中
    在线jsonp接口测试 asilu.com
    Success请求成功后会触发
    如果出现 服务器告诉浏览器返回的类型 跟Jquery内部实际转化的类型不匹配 会无法触发
    Error当请求出现问题时会触发这个函数
    模板引擎案例
    进入网站 什么值得买-好文-原创-network-json格式化
    $(.‘sds’ li :eq(3) a’) ul的第四个li标签
    $(‘tbody).on(‘click’,’.class’,function(){ })
    Mdn开发者网络
    PHP
header('content-type:text/html;charset=utf-8');
    include './data.php';
window.location.herf='http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=西兰花炒蛋';

字符串用.连接
Php可以入到html中的任意地方
可多个php连接
echo 输出字符串
print_r 输数据
JSON

//json是一种数据格式
    //属性名,属性值必须是双引号
    //跟编程语言无关
    //JSON的载体是字符串
    //基本上所有编程语言支持JSON
    //优点1:语法简洁,所有语言都提供方法解析JSON
    var JSONObject='{"name":"刘亦菲","skill":"失忆"}';
    //转化为对象
    var obj=JSON.parse(JSONObject);
    //JSON的写法---用来表示数组
    var JSONarr='["绿色的蔬菜","大蒜"]';
    //转化为数组对象
    var arr=JSON.parse(JSONarr);
    console.log(arr[2]);
    //JSON的写法--对象数组
    var JSONobjarr='{"name":"彭林","skill":"约跑","runfriends":["周林林","林立群","飞哥"]}';
    var objarr=JSON.parse(JSONobjarr);
//最外面若为双引号,则与里面的相矛盾

Php

<?php
header('content-type:application/json;charset=utf-8');
echo file_get_contents('data/person.json');
sleep(1);
?>

Xml

<?xml version="1.0" encoding="UTF-8"?>
<person>
<skill>擅长打斗地主</skill>
<name>成思城</name>
</person>

Php

<?php
header('content-type:text/xml;charset=utf-8');
echo file_get_contents('data/person.xml');
sleep(1);
?>

Json可以不设置header xml必须设置header 若后台没有设置可以在ajax中设置dataType:’json’;
Json 需要用parse将字符串转化为对象,而xml的数据用xhr.responseXML传回,其它用xhr.responseText

Jsonp

<!--
    同源:
     http://127.0.0.1/2017-8-17/09.waterFall_ajax/
     http://127.0.0.1/2017-8-17/09.waterFall_ajax/api/waterFall.php
     协议名:http
     地址一样(ip地址)
     默认端口:80
     上述三个条件都相同就是同源
     三个条件不都相同为不同源
     不同源的网站发请求就是跨域
     目前解决跨域的两个方式
     cors:cross origin resourse sharing (html5才支持 php中加header('Access-Control-Allow-Origin: *');由服务器同意)
     JSONP:src可以 JSONP用的就是src
-->

非ajax

  1. 表单get
	<form action="./getdata.php">
       <input type="text"name="whero"placehorder="请输入你喜欢的英雄">
       <input type="submit">
  </form>

Php

header('content-type:text/html;charset=utf-8');

2.表单post

 <!--表单元素提交的数据  
    提交多条数据 xxx.php?key=value&key2=value2
	    POST Array ( [food] => YUI [dotype] => JKLK )
	    post可以传输文件
	    -->
	 
	  <form action="./qq.php"method="post">
	      <input name="food"type="text"placeholder="请输入你的名字">
	      <input name="dotype"type="password"placeholder="请输入你的密码">
	      <input type="submit"value="提交">
	  </form>  
  1. 表单上传文件
	<!--上传文件的编码类型enctype-->
	   <form action="./postfile.php"method="post"enctype="multipart/form-data">
	    <input type="file"name="icon">
	    <input type="submit">

Php

print_r($_FILES);
Array ( 
    [mypic] => Array (
         [name] => blsy.jpg 
         [type] => image/jpeg 
         [tmp_name] => C:\Users\asus\AppData\Local\Temp\php75F0.tmp 
         [error] => 0 
         [size] => 20286
      ) 
   )
*/

sleep(2);
move_uploaded_file($_FILES['icon']['tmp_name'],'./files/'.$_FILES['icon']['name']);

ajax 请求
1.normal-ajax-get

<script>
        //绑定点击事件
        document.querySelector('input').onclick=function(){
            //创建对象 异步对象
            var xhr=new XMLHttpRequest();
            //请求行
            //参数三 是否使用异步 false 不使用
            xhr.open('get','xxx.php?name=jack&skill=painting',ture);
            //注册回调函数 响应回来后执行函数
            //触发次数多,readyState状态码是4时采取获取数据,能兼容所有浏览器
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&status==200)  
                {

                console.log(xhr.responseText);
                console.log('sfs');
                }
            }
            //请求头
            //参数1 键名
            //参数2 值
           //xhr.setRequestHeader('a','2');
            //请求主体 发送
            xhr.send(null);
        }
    </script>
  1. normal-ajax-post
<script>
        //绑定点击事件
        document.querySelector('input').onclick=function(){
      
            //创建对象 异步对象
            var xhr=new XMLHttpRequest();
            //请求行

            xhr.open('post','postdata.php');
            //注册回调函数 响应回来后执行函数
            xhr.onload=function(){
                console.log('xhr.responseText');
            
            }
            //请求头
            
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            //参数1 键名
            //参数2 值
           //xhr.setRequestHeader('a','2');
            //请求主体 发送
            xhr.send('name=西兰花&friend=鸡蛋');
        }
    </script>

Post传数据要设置请求头
3.jQuery-ajax/get/post/ajax-extent

<script>
    $('.get').click(function(){
        //$.get('../00.backdata/01.backsend.php','name=rose&husband=robot',function(data){
         //   alert(data);
       // })
        //可以传对象,将对象拆成键值对补在url后
        $.get('../00.backdata/01.backsend.php',{name:'rose',husband:'robot'},function(data){
            alert(data);
        })
    })
    $('.post').click(function(){
        //$.get('../00.backdata/01.backsend.php','name=rose&husband=robot',function(data){
         //   alert(data);
       // })
        //可以传对象,将对象拆成键值对补在url后
        $.post('../00.backdata/01.backsend.php',{name:'rose',husband:'robot'},function(data){
            alert(data);
        })
    })
    $('.ajax').click(function(){
        //$.get('../00.backdata/01.backsend.php','name=rose&husband=robot',function(data){
         //   alert(data);
       // })
        //可以传对象,将对象拆成键值对补在url后
        $.ajax({
            url:'../00.backdata/01.backsend.php',
           // type:'get',
           // data:'dfs',
            success:function(data){
              console.log(data)
            }
        })
    })
    $('.ajax_extend').click(function(){
        //$.get('../00.backdata/01.backsend.php','name=rose&husband=robot',function(data){
         //   alert(data);
       // })
        //可以传对象,将对象拆成键值对补在url后,若拿xml可以不写data
        $.ajax({
            url:'../00.backdata/backXML.php',
           // type:'get',如果用get可以不写type
           data:{
               name:'喜羊羊',
               skill:'卖萌'
           },
            success:function(data){
              console.log(data)
            },
            //形参可以改名字,但用默认的较好
            //参数1:异步对象,参数2:错误信息,参数3:错在哪里
            error:function(XMLHttpRequest,textStatus,errorThrown){
console.log('错误了哟');
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
            },
            //请求完成就触发
            complete:function(){

            }
            
            
        })
    })
</script>

4.跨域-cors

cors:cross origin resourse sharing (html5才支持 php中加header('Access-Control-Allow-Origin: *');由服务器同意)

5.跨域-jsonp-1
在ajax中加入dataType:‘jsonp’;
6. 跨域-jsonp-2

7.	<script>
8.	      function doSomething(data){
9.	           console.log(data);
10.	      }
11.	  </script>  
12.	  
13.	  
14.	  <script src="http://192.168.70.78/2017-8-17/12.JSONP/backData.php?callback=doSomething">
15.	      
16.	  </script>

Php

<?php
$methodName=$_GET['callback'];
echo $methodName.'({"name":"jack","food":"西兰花"})';
?>

8 ajax-文件

18.	<body>
19.	    <h2>XML2.0</h2>
20.	    <!--
21.	        技术在不停的升级,XMLHttpRequest
22.	        1.快速格式化表单数据
23.	        2.ajax上传文件
24.	        3.上传进度监控
25.	    -->
26.	    <form action="">
27.	        <input type="text"name="name"placeholder="用户名">
28.	        <input type="text"name="email"placeholder="邮箱">
29.	        <input type="text"name="address"placeholder="地址">
30.	        <input type="file"name="icon">
31.	    </form>
32.	    <input type="button"value="ajax发送文件">
33.	    <div class="prograss">
34.	<div class="step">
35.	
36.	</div>
37.	    </div>
38.	</body>
39.	</html>
40.	<script>
41.	    document.querySelector('input[type=button]').onclick=function(){
42.	         //创建对象 异步对象
43.	         var xhr=new XMLHttpRequest();
44.	            //请求行
45.	            xhr.open('post','backData.php');
46.	            //注册回调函数 响应回来后执行函数
47.	            xhr.onreadystatechange=function(){
48.	                if(xhr.readyState==4&&xhr.status==200)  
49.	                {
50.	
51.	                }
52.	            }
53.	            //格式化表单
54.	            //由于兼容性不太好,用的并不多
55.	            var sendData=new FormData(document.querySelector('form'));
56.	            //上传回调函数
57.	            xhr.upload.onprogress=function(event){
58.	               var percent=event.loaded/event.total*100+'%';
59.	               document.querySelector('.step').style.width=percent;
60.	            }
61.	            //请求头
62.	            //参数1 键名
63.	            //参数2 值
64.	           //xhr.setRequestHeader('a','2');
65.	            //请求主体 发送
66.	            xhr.send(sendData);
67.	    }
68.	</script>

Php

<?php
/*Array
(
    [name] => 12
    [email] => 3233
    [address] => 445
)
Array
(
    [icon] => Array
        (
            [name] => 01(1).png
            [type] => image/png
            [tmp_name] => C:\Users\asus\AppData\Local\Temp\php923E.tmp
            [error] => 0
            [size] => 17112
        )

)*/

//print_r($_POST);
print_r($_FILES);
move_uploaded_file($_FILES['icon']['tmp_name'],'./files/'.$_FILES['icon']['name']);
?>

Masonry(瀑布流)

<script>
    $('.grid').masonry({
        itemSelector:'.grid-item',
        columnWidth:200
    });
</script>

My-template(模板引擎)

function my_template(id,data){


var str=document.querySelector('#'+id).innerHTML;
var reg=/{{(\w+)}}/;
var result=reg.exec(str);
while(result){
    str=str.replace(result[0],data[result[1]]);
    result=reg.exec(str);
}
return str;
}

Art-template语法

<script id='ifTemplate'type='text/html'>
 <ul>
     {{if male=='女'}}
     <li>欢迎你{{name}}女士
         <ol>
            <li>这是最新款的包包</li>
            <li>这是最新款的口红</li>
            <li>没想到,你竟然是{{skill}}</li>
         </ol>
    </li>
    {{else if male=='男'}}
     <li>欢迎您{{name}}先生
         <ol>
             <li>这是最新款的拖拉机</li>
             <li>讨厌,才来找人家</li>
             <li>没想到,你竟然稍长{{skill}}</li>
         </ol>
     </li>
    {{/if}}
 </ul>
</script>
<script>
    var person1={
        male:'女',
        name:'郑爽',
        skill:'身材好'
    };
    var person2={
        male:'男',
        name:'张翰',
        skill:'这片鱼塘我承包了'
    };
    console.log(template('ifTemplate',person1));
</script>
<!--原文输出-->
<script id="norTemplate"type='text/html'>
<ul>
    <li>{{name}}</li>
    <li>{{skill}}</li>
    <li>{{@info}}</li>
</ul>
</script>
<script>
    var person={
        name:'犬夜叉',
        skill:'变犬',
        info:'<a herf="https://baike.baidu.com/item/%E7%8A%AC%E5%A4%9C%E5%8F%89/26878?fr=aladdin">犬夜叉</a>'
    };
    document.body.innerHTML=template('norTemplate',person);
</script>
<!--原文输出-->
<script id="eachTemplate"type="text/html">
<ul>
<li>{{name}}</li>
<li>兄弟们
{{each brother}}
<li>{{$value}}</li>
{{/each}}
</li>
<li>
<ol>
{{each family}}
<li>{{$value.name}}</li>---<li>{{$value.skill}}</li>
{{/each}}
</ol>
</li>
</ul>
</script>
<script>
var person={
    name:'大娃',
    brother:[
        '二娃',
        '三娃',
        '水娃',
        '火娃'
    
    ],
    family:[
        {name:'爷爷',skill:'被抓'},
        {name:'穿山甲',skill:'到底说了什么'},
        {name:'小蝴蝶',skill:'撩'},
    ]
}

其它

$(function(){
       $('.name').blur(function(){
           //为了在代码中使用this 不出现问题
           var $this=$(this);
           $.ajax({
               url:'_api/checkName.php',
               data:{
                   name:$this.val()
               },
               success:function(data){
                   console.log(data);
                   $('.tips').find('p').html(data).fadeIn(1000).delay(1000).fadeOut(1000);
               }
           })
       })

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值