AJAX

1 篇文章 0 订阅

PHP总结

1.Web服务器的分类:

  (1)静态Web服务器:

提供的内容在任何时间由任何人访问都是完全相同的!

所包含技术:HTML、CSS、JS、Flash、Gif、音视频

常见的静态Web服务器:

Apache Http

Microsoft IIS

NginX

  (2)动态Web服务器:

   提供的内容在不同时间由不同人访问是变化的!

所包含的技术:

JSP = HTML + Java

PHP = HTML + Php

ASP.NET = HTML + C#

Node.js = HTML + NodeJS

2.搭建PHP服务器

  (1)服务器端:下载并安装一款静态Web服务器

C:\xampp\apache\bin\httpd.exe

  (2)服务器端:下载并安装PHP语言的解释器

C:\xampp\php\php.exe

  推荐使用软件套装(如XAMPP/WAMP等)完成上述两步

  (3)服务器端:编写网页,保存在htdocs目录

C:\xampp\htdocs\

  (4)服务器端:启动Web服务器,等待客户端发起请求

确保80端口被httpd.exe占用

  ------------------------------------------

  (5)客户端:向服务器发起请求,获取服务器端响应内容

http://服务器的域名或IP地址:80

http://127.0.0.1:80 127.0.0.1指代当前计算机

 

3.PHP基础语法:

运算法:字符串拼接:  .  .=

逻辑结构:

foreach:

foreach(数组名 as 值变量名){}

foreach(数组名 as 下标变量名=>值变量名){}  foreach($list as $k=>$v){  }

函数的使用:

注意:函数内默认是无法使用外部的全局变量的!必须用global声明一下才可以使用!

$x=10;

function f1(){

global $x;

}

4.PHP常用语句:

PHP提供了大量的应用函数,查找手册’函数参考’

PHP为了连接MySQL数据库,提供了多套函数,比如:

mysql_connect()   早期的函数库

mysqli_connect()   improved,mysql 库的性能升级版

a)连接到MySQL服务器

$conn=mysqli_connect(...);

b)发送SQL命令提交给MySQL服务器

$result=mysqli_query($conn,$sql);

c)查看MySQL服务器返回的执行结果

if($result){...}

d)关闭连接

mysqli_close($conn)

5.PHP常用函数:

a) @...                     放在一行的开头,用于压制此行的警告消息

b) die(...)                   终止页面的执行,输出一个错误消息

c) mysqli_insert_id($conn)     返回刚刚执行的insert语句产生的自增编号

d) mysqli_affected_rows($conn) 返回刚刚执行的DML语句影响的行数

e) mysqli_fetch_row($conn)    从结果集中抓取一行(索引数组)

f) mysqli_fetch_assoc($conn)   从结果集中抓取一行(关联数组)

g) mysqli_fetch_all($result,MYSQLI_ASSOC)从结果集中抓取所有记录行

h) require('x.php')   在当前位置包含指定文件中的内容

 

6.mysqli_query()的返回值

1)DML: insert  delete  update

失败:false

成功:true

2)DQL:select

失败:false

成功:查询结果集描述对象

7.SQL语句的分类

  (1)DDL: Data Define Language,数据定义语言——定义列

Create(创建表) drop(删除表) alter(修改表) truncate(清空)rename(重命名)

  (2)DML: Data Manipulate Language,数据操作语言——操作行

Insert(增加) delete(删除) update(修改)

  (3)DQL: Data Query Language,数据查询语言

Select(查询数据)

  (4)DCL: Data Control Language,数据控制语言——控制用户权限

grant:授予权限/revoke:收回权限

  (5)事务控制

Commit(提交) rollback(回滚)  savepoint(设置保存点)

commit:提交  insert(插入)执行完成.如果想真正执行

数据库中,需要commit操作.该数据才完全插入到数据库中.如果没有执行commit,当前插入到数据库,关掉终端在此打开就不存在

 

8.URL地址

  URL:Unified Resource Locator,统一的资源定位符

  URN:Unified Resource Naming,统一的资源命名符

  URI:Unified Resource Idenfier,统一的资源识别符

9.面试题:HTTP/1.0到HTTP/1.1有哪些改进?

(1)虚拟主机:在一个Web服务器中并存多个站点

   Host: tmooc.cn

(2)持久连接:一次请求完成后,不要马上断开连接,再保持一会儿

   Connection: keep-alive

(3)代理连接:客户端可以通过代理服务器间接访问目标服务器

   Proxy: xxxx

 

10.HTTP协议的具体内容,规定了如下两种消息的格式:

  (1)请求消息: 客户端发给服务器的

  (2)响应消息: 服务器发给客户端的

    

11.

GET请求和POST请求的比较

 

GET

POST

如何发起

浏览器中输入URL回车、超链接跳转、JS跳转、SRC/HREF属性请求、GET方式提交表单、AJAX-GET

POST方式提交表单、AJAX-POST

请求数据的位置

追加在URI后,作为查询字符串,以?开头

放在请求主体中

请求数据的类型

只能是文本字符

可以是任意类型,如包含图片、视频等

能否用于上传文件

请求数据长度限制

有,浏览器/服务器对请求URI长度有限制(如1KB、4KB等)

请求主体没有长度限制!

请求数据需编码?

需要!一个UTF-8汉字编码为9个字节

需要!一个UTF-8汉字编码为9个字节

表达的语义

表客户端想获取

表客户端想传递

12.MIME: (Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

13.如何修改响应消息的头部

  (1)修改Web服务器的配置文件

    比较复杂,有些情况下无法修改,如新浪云服务器

  (2)若响应文件是HTML,则可以声明<meta http-equiv="响应头部">

仅适用于HTML文件,且只是“等价物”,并非真正的响应头部

  (3)使用动态语言代码来控制响应消息头部

PHP:  //设置一个响应消息头部

header('Cache-Control: no-cache');  

header('Content-Type: image/png');

14.根据HTTP协议的知识进行网站访问优化 有哪些方案?

(1)域名解析

    尽可能减少域名解析次数——减少跨站外部资源的引用

(2)创建连接

    努力减少连接创建次数——启用持久连接避免重复连接

(3)发送请求

    尽力减少请求次数——合理设置缓存、资源合并

(4)等待响应

    提高服务器端运行速度——提高数据运算及查询速度

(5)接收响应

    尽可能减小响应数据长度——启用压缩

15.使用AJAX的步骤(底层AJAX写法就这两种,下面那些是关于不同传值方式的写法)

  (1)创建XHR对象

var xhr = new XMLHttpRequest();

  (2)监听服务器返回响应消息事件

  (3)使用XHR连接到Web服务器

  (4)使用XHR对象发起异步的HTTP请求消息

16.使用XHR发起两种请求之一——GET

  //1 var xhr = new XMLHttpRequest();

  //2 xhr.onreadystatechange = function(){}

  //3 xhr.open('GET', 'x.php?k=v&k=v', true)

  //4 xhr.send(null);

17.使用XHR发起两种请求之二——POST

  //1 var xhr = new XMLHttpRequest();

  //2 xhr.onreadystatechange = function(){}

  //3 xhr.open('POST', 'x.php', true)

  //3.5 xhr.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded')

  //4 xhr.send('k=v&k=v')

 

18.

服务器如何返回批量的复合数据给客户端?

复合数据:一个数据有多个属性

批量复合数据:有多个复合数据 —— 二维数组

方式1:用text/plain格式

101#三星#35.5#1.jpg@102#闪迪#34.5#2.jpg@金士顿#...

好处:简单

不足:不易读取、很容易出错

方式2:用text/html格式

<tr><td>101</td><td>三星</td><td>35.5</td></tr>

<tr><td>102</td><td>闪迪</td><td>35.5</td></tr>

<tr><td>103</td><td>金士顿</td><td>35.5</td></tr>

好处:情形,方便使用   tbody.innerHTML = xhr.responseText

不足:把数据和格式混在一起,限制了数据的应用场合

方式3:用application/xml格式

<productList>

  <product pid="101">

     <pname>三星</pname>

     <price>35.5</price>

     <pic>1.jpg</pic>

  </product>

  <product pid="102">

     <pname>闪迪</pname>

     <price>34.5</price>

     <pic>2.jpg</pic>

  </product>

</ productList>

好处:是纯数据,不附带任何的显示格式限制

不足:太复杂了,阅读和解析都太麻烦

方式3:用application/json格式

[

  {

     "pid":"101",

     "pname":"三星",

     "price":35.5,

     "pic":"1.jpg"

  },

  {

     "pid":"102",

     "pname":"闪迪",

     "price":34.5,

     "pic":"2.jpg"

  }

]

有点:简单、易于阅读,处理速度快!

 

 

19.HTML和XML的区别——面试题

  HTML语法随意;XML语法严格;

  HTML标签预定义好了;XML标签都是自定义的;

  HTML用于描述网页的结构;XML标签用于描述数据;

20.使用AJAX接收五种响应消息:

  (1)text/plain

服务器端:

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

echo 'succ';

客户端:

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

  (2)text/html

服务器端:

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

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

客户端:

tbody.innerHTML = xhr.responseText

  (3)application/javascript

服务器端:

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

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

客户端:

eval( xhr.responseText )

  (4)application/xml

服务器端:

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

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

客户端:

var document = xhr.responseXML

  (5)application/json

服务器端:

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

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

$list = ...;

echo json_encode($list);

客户端:

var obj = JSON.parse( xhr.responseText )

21.面试题:如何使用jQuery的AJAX相关函数,监听失败的响应消息??——使用万能AJAX封装函数:$.ajax

22.使用jQuery的AJAX封装函数之六——$.ajax()——重点

  使用方法:

$.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 //响应完成后(不论成败)的回调

} )

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

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

对应于原生AJAX:

//1 var xhr = new XMLHttpRequest();

//2 xhr.onreadystatechange = function(){

    if(xhr.readyState===4){

        if(xhr.status===200){

            success();

        }else {

            error();

        }

        complete()

    }

}

//3 xhr.open()

beforeSend();

//4 xhr.send()

23.JS中如何处理JSON字符串

  JSON格式的字符串解析为JS对象:

var str = '{"ename":"Tom", "age":20}';

var obj = JSON.parse(str); //方法1

var obj = eval( '('+str+')' ); //方法2,不推荐使用

  JS对象编码为JSON字符串:

var obj = {ename:'Tom', age: 20};

var str = JSON.stringify(obj);    

 

     -ify: 使变为...,   sheepify    stoneify    frogify

=================================

  PHP中把数组编码为JSON字符串:

$list = [{},{},{}];

$str = json_encode( $list );

  PHP中JSON字符串解析为PHP数组/对象:

$str = '{"ename":"Tom", "age":20}';

$obj = json_decode( $str );

 

24.异步请求涉及到跨域请求的问题:

面试题:跨域请求和JSONP

  Cross Domain Request:从一个资源请求另一个资源,二者所在的请求地址不同,域名不同、端口号不同、请求协议不同。

  

  提示:localhost和127.0.0.1也算跨域!

  浏览器允许跨域请求的情形

IMG、LINK、SCRIPT、IFRAME ...

  浏览器禁止跨域请求的情形

XHR  —— 浏览器处于安全考虑,禁用了XHR的跨域请求(其实服务器给出了响应消息,但浏览器不让使用)

 

面试题:我们公司项目很大,页面很多,出于性能考虑,把静态资源(html等)放在http://static.cn服务器上了,把动态资源(php)放在http://dynamic.cn服务器上了,如何让一个x.html异步请求x.php呢?

 

如何解决浏览器的XHR跨域请求限制 —— 八种方案:

  (1)

  (2)

  (3)

  (4)

  (5)

  (6)

  (7) 修改响应消息头部,添加Access-Control-Allow-Origin头部

  (8) 使用JSONP——非常巧妙

 

JSON: JavaScript Object Notation,是一种字符串数据格式(羊肉)。

JSONPJSON with Padding,填充式JSON,与JSON完全两码事,是一种使用JSON数据的方式(把羊肉红烧)。意思是在JSON字符串左右添加函数名: doResponse( {"ename":"Tom", "age":20} );

JSONP是专用于解决XHR跨域限制一种手段。基本原理:使用动态创建的一个SCRIPT标签代替XHR发起异步请求,要求服务器必须返回application/javascript,立即在客户端执行——要执行的函数本体在客户端浏览器中声明。

  <script src="x.php" async></script>

 

25.jQuery中如何使用JSONP发起异步请求:

(1) $.getJSON()

  用途1:使用XHR发起异步请求(不能跨域)

$.getJSON('x.php', doResponse)

  用途2:使用JSONP发起跨域异步请求

$.getJSON('http://跨域地址/x.php?callback=?', doResponse)

 

(2) $.ajax()

  用途1:使用XHR发起异步请求(不能跨域)

$.ajax({  })

  用途2:使用JSONP发起跨域异步请求

$.ajax({ dataType: 'jsonp' })

26.JS和CSS加载外部资源的路径问题

  JS是运行于HTML网页中,JS中请求的资源的路径使用相对于HTML文件的路径;

  CSS是独立被浏览器解释,CSS中使用外部资源(如图片)路径使用相对于CSS文件的路径;

27..表单序列化

  $('#formId').serialize( );

  jQuery中提供的表单序列化函数,可以把选定的表单中所有带name属性的输入域连同值转换为k=v形式,全部使用&符号拼接在一起,组成一个大的字符串,用于异步请求数据提交。

28.Web项目中的分页查询 —— 难点 & 重点

  当一个页面需要呈现的数据很多时,不可能一次性全部显示,必须使用分页显示:

  

初始时显示第1页,用户点击某个页号,异步请求对应页中的内容。

分页查询客户端提交的请求消息形如:

  GET /select.php?pageNum=3 HTTP/1.1

分页查询服务器返回的响应消息形如

  {

recordCount: 36,//满足条件的记录的总数

pageSize: 8,//页面大小,每页最多显示的记录数

pageCount: 5, //总的页数

pageNum: 3,//当前显示的页号

data: [ {},{}...{} ]//当前页中的数据

  }

(1)MySQL如何查询出符合条件的总的记录数量

  SELECT  COUNT(*)  FROM jd_product  WHERE...;

  查询结果集中有一行一列的数据

(2)PHP如何计算页面的总数量:

   ceil( recordCount / pageSize )   //上取整函数

(3)MySQL如何实现查询指定页面中的记录

  提示:不同的数据库实现分页查询的SQL各不相同!

  SELECT * FROM jd_product WHERE ... LIMIT start, count;

  LIMIT: 限制,结果集中从哪一行开始获取数据(从0开始),最多要多少行。

  1页: LIMIT 0, 8      01234567

  2页: LIMIT 8, 8      89101112131415

  3页: LIMIT 16, 8

  4页: LIMIT 24, 8

  5页: LIMIT 32, 8

  pageNum页:

LIMIT (pageNum-1)*pageSize, pageSize

 

1  2  3

  1  2  3  4

1 2  3  4  5   

2 3  4  5

3 4  5

 

29.关系型数据库中两个表间的关系——数据设计理论

  (1)一对一关系

     可以在任一表中添加引用对方表的外键列

  (2)一对多关系

部门vs员工、板块vs帖子、商品vs留言、分类vs商品

只能在多方表中添加外键列,引用一方的主键

  (3)多对多关系

商品vs购物车、学生vs课程、工人vs车间、员工vs项目

     只能再创建一个中间表,有两个外键列,分别指向每个表的主键

30.如何访问异步加载的页头和页尾中的元素:

  事件绑定:  可以委托给DOM树上已有的父元素

  HTML内容操作:

$(...).load('x.php', function(){

//异步请求完成后,再处理后加载的DOM元素

})

31.SQL中的多表查询

  CREATE TABLE dept( did INT, dname VARCHAR(32) );

  INSERT INTO dept VALUES

(10, '研发部'),

(20,'市场部');

 

  CREATE TABLE emp( eid INT, ename VARCHAR(32), deptId INT );

  INSERT INTO emp VALUES

(1, 'Tom', 10),

(2,'Mary', 10),

(3,'John', 20);

  请查询出每个员工姓名及其所在部门名称:

SELECT ename, dname FROM emp, dept;  //该语句会得到一个笛卡尔积:从每个表中任取一行记录,与另一表中的每一行记录匹配,配对总可能数:m * n

SELECT ename, dname FROM emp, dept

WHERE deptId = did;

  跨表查询:查询得到的结果集来自于多个表!为了避免产生笛卡尔积,必须有两个表的相等条件!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值