AJAX请求

AJAX概念

  • Asynchronous Javascript And XML(异步JavaScript和XML),

  • AJAX并不是一种语言,而是一种创建交互式网页应用的网页开发技术

  • AJAX是Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest 等技术的组合

    • 使用XHTML+CSS来标准化呈现;

    • 使用XML和XSLT进行数据交换及相关操作-json代替;

    • 使用XMLHttpRequest对象与Web服务器进行异步数据通信;

    • 使用Javascript操作Document Object Model进行动态显示及交互;

    • 使用JavaScript绑定和处理所有数据

  • AJAX核心对象是XMLHttpRequest

AJAX优缺点

  • AJAX异步处理的优点

    • 减轻服务器的负担,AJAX一般只从服务器获取只需要的数据。

    • 无刷新页面更新,减少用户等待时间。

    • 更好的客户体验,可以将一些服务器的工作转移到客户端完成,节约网络资源,提高用户体验

    • 无平台限制

    • 促进显示与数据相分离

  • AJAX异步处理的缺点

    • 页面中存在大量js,给搜索引擎带来困难

    • AJAX干掉了Back和History功能,即对浏览器机制的破坏

    • 存在跨域问题 域名

    • 只能传输及接收utf-8编码数据

PHP基础

php环境的安装,使用xampp(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。查看百度百科解释

使用英文官网地址下载:XAMPP Installers and Downloads for Apache Friends

ajax实现的是前后端交互,所以需要对应的后端语言作为支撑

PHP输出变量

  1. echo 输出一个或者多个字符串

    echo "Hello, world!"."<br />";
    echo("你好");

  2. print() 输出一个字符串

    print("河南");

  3. printf() 格式化输出语句

    $age = 18;
    $weight = 77.5;
    printf("你好....%d, 体重 = %f"."<br>", $age, $weight);

  4. 输出数组

    print_r($age);
    // 索引(index)数组
    $week = array("周一", "周二", "web");
    // 关联数组
    $per = array("name"=>"张三", "age"=>18, "sex"=>"男");
    print_r($week);
    echo "<br />";
    print_r($per);

  5. var_dump(): 输出数组和基本变量, 并能够将变量的类型输出出来

    echo "<br />";
    var_dump($week);
    ​
    echo "<br />";
    var_dump($per);
    ​
    echo "<br />";
    var_dump($age);
    ​
    echo "<br />";
    var_dump($weight);
    ​
    echo "<br />";
    echo "<br />";
    echo "<br />";
    echo "<br />";
    echo "<br />";

变量的定义和输出

  1. 变量

    1, 定义变量以$开头, 不用加 var

    2, 变量名由数字, 字母, 下划线组成, 数字不能开头

    3, 区分大小写

    4, 见名知意

$age = 18;
$Age = 20;
echo $age."<br />".$Age."<br />";
​
$num;// 如果不赋初值结果是 NULL
var_dump($num);
echo "<br />";
  1. 变量的赋值

    // 1, 值赋值
    $a = 3;
    $b = 5;
    $c = $a;
    echo $a.",".$b.",".$c."<br />";
    $c = 100;
    echo $a.",".$b.",".$c."<br />";
    ​
    // 2, 址赋值
    $d = &$b;
    echo $a.",".$b.",".$d."<br />";// 3, 5, 5
    $d = 100;
    echo $a.",".$b.",".$d."<br />";// 3, 5, 100

  2. 常量

    常量定义语法:

    * define(参数一, 参数二, 参数三)

    * 参数一: 常量的名字

    * 参数二: 常量的值

    * 参数三: 布尔值, 是否区分大小写. true 代表不分区, false 代表区分. 默认值 false(一般使用默认值)

    define("PI", 3.1415, TRUE);
    ​
    echo PI * 2;
    echo Pi * 2;
    echo pI * 2;
    echo pi * 2;
    ​
    echo "<br />";

函数

  1. 基础结构

    function sum($a, $b) {
        return $a + $b;
    }
    echo sum(3, 5);

  2. 定义函数, 交换两个变量的值

    function changeNum(&$a, &$b) {
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo $a.", ".$b;// 5, 3
    }
    ​
    $aNum = 3; $bNum = 5;
    changeNum($aNum, $bNum);
    echo $aNum.", ".$bNum;// 5, 3

php的外部引入文件

// include, require, include_once, require_once都可以引入外部 php 文件. 
include 与 include_once 的区别: 
        通过 include_once 引入外部文件, 无论引入多少次, 结果都只会引入一次;
        通过 include 多次引入外部 php 文件, 会将外部 php 文件中的内容复制多次到当前页面中, 会造成代码冗余.
    
require 与 require_once 的区别: 
        与上述 include 与 include_once 的区别 相同.
    
include 与 require 的区别:
        当通过 require 引入的外部文件中内容报错或者文件路径出错, 会影响到当前页面代码的执行; 
而通过 include 引入不会影响当前页面代码的执行.

接收传递过来的数据

// 获取前端post请求传递过来的数据
$user = $_POST["un"];
$pass = $_POST["ps"];
​
var_dump($pass); // 返回数据类型
if ($user == "123" && $pass == "123") {
        echo "POST是咱的人";
} else {
        echo "POST不是咱的人";
}

AJAX实现步骤

  1. 初始化XMLHttpRequest对象

    if (window.XMLHttpRequest) {// Mozilla, Safari, ...
        var http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE 5 ,6
        var http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }

  2. XMLHttpRequest发出HTTP请求

    http_request.open("GET|POST","test.php?username="+,false);
    http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //仅POST请求时需要设置
    http_request.send();

  3. XMLHttpRequest取得响应数据并显示

    if(http_request.readyState==4  && http_request.status==200){
        $("div").text(http_request.responseText)
    }

案例:向php请求数据,并返回请求内容

php文件内容

<?php
    // 1.接收数据
    $tel=$_GET['tel'];
    // 2.判断数据,13409370012 18336396807
    if($tel=='18336396807' || $tel=='13409370012'){
            echo(0);// 电话号码已经存在
    }else{
            echo(1); //可以使用当前电话号码
    }
    // 3.返回数据
    // 获取前端post请求传递过来的数据
?>

案例:ajax请求数据,请求回来的数据格式为字符串

echo '{
		"result_code": 200,
		"result_msg": "OK",
		"result_list": [
		{
		"patientName": "刘德华",
		"age": 60,
		"sex": "男",
		"departmentname": "骨科",
		"Inspectionitems": "血糖,甲状腺,心肺,肾脏"
		},
		{
		"patientName": "马德华",
		"age": 70,
		"sex": "男",
		"departmentname": "猪八戒",
		"Inspectionitems": "血糖,甲状腺,心肺,肾脏"
		},
		{
		"patientName": "唐僧",
		"age": 60,
		"sex": "男",
		"departmentname": "骨科",
		"Inspectionitems": "血糖,甲状腺,心肺,肾脏"
		}
	]
}';

JSON

  • Javascript Object Notation,是一种轻量级的数据交换格式

  • JSON支持多种语言

  • 格式

    {key:value,key:value,.....}  对象格式
    [{key:value,key:value,.....},{key:value,key:value,.....},......]  数组格式
    
  • PHP处理:

    $json=json_encode($array)
    $array=json_decode($json)
    
  • JavaScript处理:

    eval( '('+json+')' )
    JSON.parse(json)  json字符串转为json
    JSON.stringify   json转为json字符串
    

跨域请求数据

什么是跨域

什么是跨域:跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制

什么是同域:协议, 域名, 端口号 完全一致, 是同域.

协议: http, https

域名: 一级域名, 二级域名, 三级域名

端口号: 8080, 443等

https://www.oa.ranyihang.com:8080
https://www.oa.ranyihang.com:8081
https://www.ranyihang.com:8080
http://www.oa.ranyihang.com:8080

如何解决跨域问题

解决跨域问题有三种方式:Jsonp,postMessage,CORS

前端:Jsonp

前端iframe中:postMessage

后端:CORS

数据地址

百度数据地址:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=javascript&cb=jQuery1102076227855690958_1542010335391&_=1542010335404

jsonp跨域

前端发送请求

后端配合回调函数

好处:

  1. javascript 兼容性比较好

  2. 不需要服务器支持,直接在本地运行

缺点:

  1. 它只支持GET请求而不支持POST等其它类型的HTTP请求

  2. 它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

  3. jsonp在调用失败的时候不会返回各种HTTP状态码。

  4. 安全性。万一假如提供jsonp的服务存在页面注入漏洞,即它返回的javascript的内容被人控制的。那么结果是什么?所有调用这个 jsonp的网站都会存在漏洞。于是无法把危险控制在一个域名下…所以在使用jsonp的时候必须要保证使用的jsonp服务必须是安全可信的

postMessage

postMessage 方式进行跨域是HTML 5新增的跨域技术

A页面

<input type="button" value="点击" id="oneBtn">
<iframe src="http://192.168.64.2/AJAX-1/03postMsgB.html" width="800" height="500" id="oneFrame"></iframe>

B页面

<h1>你不努力, 没人替你坚强!</h1>

body {
	background: lightblue;
}

A页面添加跨域

var oneBtn = document.getElementById("oneBtn");
var oneiFrame= document.getElementById("oneFrame");

oneBtn.onclick = function() {
	// 演示下面这行代码时, A页面时通过 XAMPP 中的 Apache服务器打开.
	// 同域时, 可以直接在A页面, 修改 B页面的内容
	oneiFrame.contentWindow.document.body.style.background = "red";
}
oneBtn.onclick = function() {
	// postMessage
	oneiFrame.contentWindow.postMessage("hello", "http://192.168.64.2/");
}

B页面接收A界面传递的值

window.onmessage = function(event) {
	var even = event || window.event;
	// data 属性中存储的是其他页面通过 postMessage 传过来的值
	console.log(even.data);
	switch (even.data) {
		case "hello":
				document.body.style.background = "red";
				break;
		default:
				break;
	}
}

CORS实现跨域请求

php页面配置请求内容

header('Access-Control-Allow-Origin:http://www.abc.com'); // 允许一个访问
header('Access-Control-Allow-Origin:*'); // 允许所有访问
echo '您已经访问成功';

发送ajax请求

<input type="submit" id="inp"/>
<script>
var oInp=document.querySelector('#inp');
addEvent(oInp,'click',getMsg);
function getMsg(){
		url='http://192.168.64.2/1.6/2.getCors.php';
		ajaxPostAsyn(url,'',ok,error);
		function ok(res){
			console.log(res.responseText);
		}
		function error(){
			console.log('error');
		}
}
</script>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值