Ajax学习(2)

有请求就有响应,在Ajax中响应中有几种模式

1、普通文本返回

2、xml返回

返回需要在服务器端设置 header("Content-Type:text/xml");

然后客户端就通responseXML可以获取xml的dom对象,将其解析即可

客户端测试代码如下returnType.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>returnType</title>
	<script type="text/javascript">
		function createXML() {
			if(window.XMLHttpRequest){
				return new XMLHttpRequest();
			}else{
				//IE6、7、8
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		function test1(){
			//创建xhr实例
			var xhr = createXML();
			//打开链接
			//ture为异步,false为同步
			//异步的含义即,发送请求不等待服务器响应,继续往下执行
			//同步的含义即,发送请求后等待服务器响应,然后往下执行
			xhr.open("GET","returnType.php",true);
			
			//如何获取返回信息
			//通过监听状态的变化来获取返回响应,同时节省时间
			xhr.onreadystatechange = function(){
				if(this.readyState == 4 && this.status == 200){
					// alert("请求完成了");
					//alert(this.responseXML);
					var xmldom = this.responseXML;
					var chs= xmldom.getElementsByTagName("book")[0];
					// alert(chs.firstChild.firstChild.wholeText);
					// alert(chs.lastChild.firstChild.wholeText);
					document.getElementById("btitle").value = chs.firstChild.firstChild.wholeText;
					document.getElementById("bintro").value = chs.firstChild.lastChild.wholeText;


				}
			}
			//发送器请求
			xhr.send(null);
			// alert("hello");
		}
		function test2() {
			
		}
	</script>
</head>
<body>
	<input type="text" id="btitle"><br/>
	<input type="text" id="bintro"><br/>
	<input type="button" οnclick="test1()" value="测试返回值"></input>
	<input type="button" οnclick="test2()" value="测试返回值"></input>
	<div id="progress"></div>
</body>
</html>

服务器代码如下returnType.php

<?php 
header("Content-Type:text/xml");
?>
<?xml version="1.0" encoding="utf-8"?>
<bookstore><book bid="b008"><title>天龙八部</title><intro>人生苦短</intro></book></bookstore>

3、json格式

json格式其实就是字符串格式,传到前台还是用responseText接受,然后用eval解析成Js的对象,然后就可以愉快的访问了

前端测试代码returnJsonType.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>returnJsonType</title>
</head>
<body>
	<script type="text/javascript">
		function createXHR() {
			if(window.XMLHttpRequest){
				return new XMLHttpRequest();
			}else{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		// function createXML() {
		// 	if(window.XMLHttpRequest){
		// 		return new XMLHttpRequest();
		// 	}else{
		// 		//IE6、7、8
		// 		return new ActiveXObject("Microsoft.XMLHTTP");
		// 	}
		// }
		function test() {
			var xhr = createXHR();
			xhr.open("GET","./returnJsonType.php",true);
			xhr.onreadystatechange = function(){
				if(this.readyState==4 && this.status==200){
					// alert(this.responseText);
					var book = eval("("+this.responseText+")");
					// alert(book);
					document.getElementById("btitle").value = book.title;
					document.getElementById("bintro").value = book.intro;
					// alert(book.title);
					// alert(book.intro);	
				}
			}
			xhr.send(null);
		}
	</script>
	<input type="text" name="btitle" id="btitle"></input><br>
	<input type="text" name="bintro" id="bintro"></input><br>
	<input type="button" name="submit" value="测试返回为json" οnclick="test()"></input>
	<!-- <input type="button"></input> -->
</body>
</html>

后台测试代码returnJsonType.php

<?php 
	$book = array("title"=>"天龙八部","intro"=>"人生八苦");
	print_r(json_encode($book));
?>

当然后台如果是个数组,那么就可以使用json_encode来得到json对象,然后传到那边用eval解析成Js对象

如果是json对象转化为数组,则用json_decode来得到即可

4、jsonp返回

首先需要百度找到谷歌的jsonp接口,我们访问该接口会返回一个json对象,并且可以采取回调函数来处理。实际上jsonp的方式不够官方,也不能算ajax,其只是访问了一个接口,然后得到json对象,并且是通过加载script的方式,因此不能算ajax

测试代码returnJsonpType.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	
</head>
<body>
	<input type="text" name="keyword"></input>
	<input  type="button" value="搜索" οnclick="sear()"></input>
	<div id="szone">asdf</div>
</body>
<script type="text/javascript">
		function sear() {
			var kw = document.getElementsByName("keyword")[0].value;
			var url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='+kw+'&callback=aa';
			var scr = document.createElement("script");
			alert("adf");
			scr.setAttribute("type", "text/javascript");
			scr.setAttribute("src",url);
			document.getElementsByTagName("head")[0].appendChild(scr);
		}
		function aa(res){
			// alert(res);
			console.log(res);
			var szone = document.getElementById("szone");
			var results = res.responseData.results;
			var str = "";
			for(var i in results){
				str+='<p>'+results[i].title+'<br/>'+'</p>';
				str+='<p>'+results[i].content+'<br />'+'</p>';
				str+='<p>'+results[i].url+'<br />'+'</p>';
			}
			szone.innerHTML = str;
		}
	</script>
</html>
注意要翻墙。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值