zoukankan      html  css  js  c++  java
  • 在jquery中使用AJAX

    在jquery中使用封装好的AJAX会对开发效率起到极大的便利,因此掌握jquery中的一系列AJAX封装函数是做好页面数据交互的必备技能;

    1、在之前,我们首先需要详细了解AJAX异步请求接受的五中响应消息,根据不同的响应类型进行不同的操作

      (1)text/plain    // 明文

           服务器端:

                  header('Content-Type: text/plain');

                  echo 'succ';

           客户端:

                  if(xhr.responseText==='succ'){ ... }

      (2)text/html   //html 片段

           服务器端:

                  header('Content-Type: text/html');

                  echo "<tr><td>$data</td></tr>";

           客户端:

                  tbody.innerHTML = xhr.responseText

     (3)application/javascript   //javascript代码片段

           服务器端:

                  header('Content-Type: application/javascript');

                  echo "alert($data); f1(); f2($data)";

           客户端:

                  eval( xhr.responseText )

      (4)application/xml  //xml数据结构字符串

           服务器端:

                  header('Content-Type: application/xml');

                  echo "<bookList><book>$b</book></bookList>";

           客户端:

                  var document = xhr.responseXML

     (5)application/json  //json 结构数据字符串

           服务器端:

                  header('Content-Type: application/json');

                  //echo "[ {"bname":"","price":35.5},{} ]";

                  $list = ...;

                  echo json_encode($list);

           客户端:

                  var obj = JSON.parse( xhr.responseText )

    2 、 jquery 中总共封装了六个有关AJAX异步请求的函数 :

      (1)、对象方法  ---load()   

                 $('选择器').load(URL, [请求数据], [成功后的回调函数])

                 $('ul').load('search_suggest.php');

                 向指定的URL发起异步请求;若有请求数据,就是POST请求,否则就是GET请求;获取服务器端返回HTML片段响应,设置为当前选定元素的innerHTML。

      

      (2)、全局函数 ---$.get()

        $.get(URL, [请求数据], 响应成功后的回调函数)

        向指定的URL发起异步的GET请求,把请求数据追加在URL的后面;服务器给出了成功的响应会自动调用第三个参数——doResponse。

          提示:$.get会根据服务器端返回的响应消息内容类型自动决定如何处理,如applicatoin/json,会自动调用JSON.parse(xhr.responseText)进行解析!

      

      (3)、全局函数---$.post()

        $.post(URL, 请求数据, 响应成功后的回调函数)

        基本上同$.get() 不同的是 请求类型为POST 而且会自动设置请求头的 content-type 为 application/x-www-form-urlencode;

      

      (4)、$.getScript()    向指定的URL发起异步的GET请求,把请求数据放置在url后面;服务器给出了成功的响应会自动执行eval( xhr.responseText )

                 要求服务器必须返回application/javascript!即使不是,也会强制调用eval(xhr.responseText)进行执行!而$.get()可以实现同样的功能,却可以根据服务器端的响应头来决定是否调用eval()

      (5)、 $.getJSON()   指定的URL发起异步的GET请求,把请求数据放置在url后面;服务器给出了成功的响应会自动执行JSON.parse( xhr.responseText )

                 要求服务器必须返回application/json!即使不是,也会强制调用JSON.parse(xhr.responseText)进行执行!而$.get()可以实现同样的功能,却可以根据服务器端的响应头来决定是否调用JSON.parse()

      上述五个函数的通病:只能处理成功的响应消息!如果服务器端返回了错误的响应消息(如404)上述五个函数不会有任何的提示——没有相关的回调函数!

      (6)、$.ajax()    jquery中所有的异步请求都推荐使用 $.ajax()函数来完成   

        $.ajax()函数接收一个众多参数组成的对象,可以指定

          成功的调用:  beforeSend()  =>  success()  => complete()

          失败的调用:  beforeSend()  =>  error()  => complete()

         $.ajax( {

                    type: 'GET',   //POST/PUT/DELETE...

                    url: 'x.php',

                    data: 'k=v&k=v',  //{k:v, k:v}

                    beforeSend: fn,      //在请求发送前的回调

                    success: fn,            //响应成功后的回调

                    error: fn,               //响应失败后的回调

                  complete: fn          //响应完成后(不论成败)的回调

             } )

    对应于原生AJAX:

      var xhr = new XMLHttpRequest();

      xhr.onreadystatechange = function(){

          if(xhr.readyState===4){

              if(xhr.status===200){

                  success();

              }else {

                  error();

              }

              complete()

          }

      }

      xhr.open()

      beforeSend();

      xhr.send()

    上面仅仅列举了$.ajax()方法的几个常用的参数,还有更多的参数请查看手册

    案例演示 jquery中的$.ajax方法使用

    实现效果如下图:

    (1)、实现 li 的 onmouserover 事件 请求该类别下的所有车辆信息

    (2)、实现 列表下的div 的 click 事件 请求车辆详细信息

     

    <!doctype html>
    <html>
     <head>
      <meta charset="UTF-8">
      <title>...</title>
      <style>
    	*{
    		padding:0;
    		margin:0;
    	}
    	.container{
    		900px;
    	}
    	.container ul{
    		overflow:hidden;
    		list-style:none;
    		100%
    	}
    	.container ul li{
    		text-align:center;
    		border-bottom: 1px solid #eee;
    		float:left;
    		line-height:30px;
    		185px;
    		padding:0 20px;
    	}
    	.container ul li:hover{
    		border-bottom:1px solid red;
    	}
    	#carList {
    		100%
    		overflow:hidden;
    		height:325px;
    	}
    	#carList div {
    		float:left;
    		padding-top:25px;
    		300px;
    	}
    	#carList>div:hover{
    		cursor:pointer;
    	}
    	#carList div b {
    		padding-left:20px;
    	}
    	#carList div p{
    		line-height:35px;
    		padding-left:20px;
    	}
    	#carList div p span {
    		color:red;
    	}
    	#carShow{
    		margin-top:85px;
    		overflow:hidden;
    	}
    	#carShow img{
    		float:left;
    	}
    	#carShow>div{		
    		float:left;
    		padding-left:175px;
    	}
    	#carShow p{
    		font-size:1.5em;
    		line-height:35px;
    	}
    	#carShow p span{
    		color:red;
    	}
    	#carShow.hide{
    		display:none;
    	}
      </style>
     </head>
     <body>
      <h1>车辆查询系统</h1>
      <hr>
      <div class="container">
    		<ul id="uList">
    			<li data-value="LT8">8万以下</li>
    			<li data-value="LT15">8-15万</li>
    			<li data-value="LT30">15-30万</li>
    			<li data-value="SUV">SUV</li>
    		</ul>
    		<div id="carList">
    		</div>
    		<div id="carShow" class="hide">
    			
    		</div>	
      </div>
      <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
      <script type="text/javascript">
    		$("#uList").on("mouseover","li",function(e){
    				var $v = $(this).attr("data-value");
    				//console.log($v);
    				$.ajax({
    					url:"car_list.php",
    					data:{"type":$v},
    					success:function(obj){
    						html="";
    						for(var i =0; i<obj.length;i++){
    							var c = obj[i];
    							html+=`<div data-select='${c.cid}'>
    											<b>${c.cname}</b>
    											<p>有
    												<span>${c.count}</span>
    												正在购买
    											</p>
    											<img src='${c.pic}'></img>
    										</div>`;
    						}
    						$("#carList").html(html);
    					}
    				});
    		})
    		$("#carList").on("click","div",function(){       
    			var $v = $(this).attr("data-select");
    			console.log($v);
    			$.ajax({
    				url:"car_select.php",
    				data:{"cid":$v},
    				success:function(obj){
    					$("#carShow").removeClass("hide").html(
    					`<img src='${obj.pic}' alt="">
    					<div>
    						<p>汽车编号:${obj.cid}</p>
    						<p>
    							<b>${obj.cname}</b>
    						</p>
    						<p>
    							<span>¥${obj.price}</span>
    						</p>
    						<p>有
    							<span>${obj.count}</span>
    						人正在购买</p>	
    					</div>`);				
    				}
    			});
    		})
      </script>
     </body>
    </html>
    

      

    (3)、响应页面以php为例  -------数据传输格式为JSON

    <?php   //init 文件
    $conn = mysqli_connect('127.0.0.1','root','','huimaiche',3306);
    $sql = 'SET NAMES UTF8';
    mysqli_query($conn,$sql);
    

       

    <?php    // li onmouserover 事件的响应   
    header('Content-Type:application/json;charset=UTF-8');
    @$tid  = $_REQUEST['type'] or die('{"msg":"type required"}');
    require('car_init.php');
    $sql = "SELECT * FROM car WHERE type='$tid'";
    $result = mysqli_query($conn,$sql);
    $list = mysqli_fetch_all($result,MYSQLI_ASSOC);
    echo json_encode($list);
    

      

    <?php  // div click事件 的响应
    header('Content-Type:application/json;charset=UTF-8');
    @$cid  = $_REQUEST['cid'] or die('{"msg":"cid required"}');
    require('car_init.php');
    $sql = "SELECT * FROM car WHERE cid='$cid'";
    $result = mysqli_query($conn,$sql);
    $row = mysqli_fetch_assoc($result);
    //var_dump($row);
    echo json_encode($row);
    

      

  • 相关阅读:
    吴裕雄--天生自然 诗经:临江仙·滚滚长江东逝水
    吴裕雄--天生自然 PYTHON3开发学习:正则表达式
    吴裕雄--天生自然 PYTHON3开发学习:面向对象
    吴裕雄--天生自然 PYTHON3开发学习:OS 文件/目录方法
    吴裕雄--天生自然 PYTHON3开发学习:File(文件) 方法
    吴裕雄--天生自然 PYTHON3开发学习:输入和输出
    吴裕雄--天生自然 PYTHON3开发学习:函数
    吴裕雄--天生自然 PYTHON3开发学习:迭代器与生成器
    吴裕雄--天生自然 PYTHON3开发学习:循环语句
    吴裕雄--天生自然 PYTHON3开发学习:条件控制
  • 原文地址:https://www.cnblogs.com/sunyaaa/p/7083101.html
Copyright © 2011-2022 走看看