周末给自己放了一个小假,周五晚上跟同学出去吃饭,周六又休息了一天,直到周日才坐到电脑前面码字。

本来说好周末这两天把之前三篇的代码根据评论中的建议好好修改一下的,顺便认真系统地学习一遍HTML基础。结果现在看来是赶不及了,因为这篇文章写完后要给妹子看,毕竟课程设计的进度也能拖太久,已经过了一个星期,只剩半个月的时间不到。我打算等整个系列写完之后,再花足够多的时间来整理完善,可以根据初学者的特点增加一些内容:例如如何学习HTML、如何找出PHP代码中的BUG并解决之类的东西。因为老同学很用功,很多东西都不需要我讲,她自己就看书看懂了,省了不少事。

遇到一个知道努力而且聪明的“学生”是多么的不容易,相信很多以各种形式当过“老师”的朋友都会有这样的感叹。既然遇到了,那就更应该以一个负责任的态度去教。写博客,其实也是一样的道理,既然有这么多的点击率(其中至少有那么几个人是抱着学习参考的目的来看的),那就必须要尽心尽力去写好。

作为程序员,整天面对着电脑以及身处一个男女比例极端失调的工作群体,能跟女性接触的机会本来就难得,要想遇到一个令自己动心而且对方还对自己有好感的女生就更是难上加难了。所以,如果真的缘分来到,让你遇上一个这样的女孩子,一定要好好珍惜。就像之前几篇说的那样,只要拿出琢磨代码和BUG的十分之一精力好好待她,就不会有什么大问题。虽然我还没毕业参加工作,但是常常会听说IT行业经常需要加班加点,甚至周末也没时间陪女友陪家人。实际情况是不是真的如此,是不是非常普遍,希望大家能在评论中告诉一下楼主自己切身和听闻的现实情形。然而无论如何,珍惜眼前人,待好眼前人毕竟才是最重要的。想想办法,抽出时间,多跟自己心仪的女生约会,多跟交心的朋友聚会,多回家陪陪逐渐年迈的父母。

且不说感情需要维系,能跟他们在一起的日子,已经在飞逝的流光中越来越少了。——写在毕业前九个月。

—————————————————————闲聊结束——————————————————————

前情回顾:在第(3)篇中,我们一起给妹子示范了如何与数据库进行简单的交互,并且讲解了简单的MVC架构原理。妹子在看完博客之后,我就让她先想好项目的框架到时候要怎么搭,有多少个文件,文件之间的关系又是怎么样的。下面,让大家看看她的一部分成果:

 四、管理资源的页面  OK
Veiw:
[] 管理资源页面manage.php(管理资源界面的视图,显示添加资源,添加资源时必须给该资源选择一个资源类型,若没有匹配的资源类型,旁边有一个可以选择添加资源类型的超链接,连接到manage_type.php。表单action到do_manage.php那里,用js判断是否有空的选项)
[]添加资源类型页面manage_type.php。可以设置资源的最小单位和起始时间。
Control:
[]处理增加信息 do_manage.php(处理manage.php传来的数据。利用Class_manage类里的resource_exist()方法,判断是否已经有该资源,有,return 。若没有该资源,利用insert_resource()方法添加资源到数据库resource。)
[]处理增加资源类型do_manage_type.php(处理manage_type.php传来的数据。利用Class_type类里的type_exist()方法,判断是否已经有该资源,有,return 。若没有该资源,利用insert_type()方法添加资源到数据库type。) Model:
[]自定义处理管理资源的类do_manage_model.php(定义Class_manage类,
方法有: resource_exist(资源类型,资源名称)方法判断是否已经有该资源。 insert_resource(资源名,资源类型)方法,插入数据库。)
[]Class_type类(Type_exist(资源类型)方法,用于在添加资源类型时,判断是否有该资源类型。Insert_type(资源类型,开始时间,结束时间,时间单位)插入数据库)

令人惊喜的是,妹子已经对整个项目的框架有所把握了,那么我现在要做的事是什么呢?有人可能会想,既然框架都已经在自己的帮助下七七八八了,剩下自己就安心做别的,等妹子在开发过程中遇到什么问题再问自己好了。这样的想法不能说是错,但是,如果我们可以事先把项目中的一些关键地方帮妹子想好解决方案,到时候就会省去她很多的摸索时间以及也可以让自己不会因为临时遇到问题为了尽快回答而给出一个比较没那么好的策略。(而且,我们邪恶地想想,妹子刚遇到问题我们就给出一个近乎完美的解决方案,然后还装X地说:“早知道你会遇到这个问题,我都帮你想好啦。”妹子顿时感觉自己体贴入微有木有啊!!!顿时对自己加分加分再加分有木有啊!!!)

例如就这个管理资源页面——有许多不同的资源,那么每个资源的显示方式不尽相同,如果每切换一个资源或一类资源就切换一次页面的话,不仅用户体验不太好(想象一下你每切一个资源就刷新好久),而且还会对网络负载带来不必要的负担。因为不同的资源它们的资源管理页面都大致相同,某些部分是一模一样的,所以,我想看到这里,许多人都会跟我想到一块儿去,那就是传说中高端大气上档次的AJAX。

读音:e:j^ks 。AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。——来自《百度百科》

看完这些,其实妹子也不会对AJAX有多少认识,我们还是直接上例子吧!通过实际的示范,说明它到底是是一个什么样的东西。

第八步:简单的AJAX示范

声明:代码重构来源自陈浩编著的《零基础学PHP》。另外也介绍大家看看这本书,对于新手入门还是蛮不错的,但深层次的东西却几乎没有。

首先,我们看一下HTML+JavaScript的部分(妹子问我,JavaScript跟Java是什么关系啊?看起来这么像。我引用网上说法,回答说:嗯嗯,大概就是雷锋跟雷峰塔的关系吧。)

ajax.html

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ajax应用实例</title> <script language='javascript'>
var xmlHttp=null; /*
* 获取XmlHttpRequest对象
* 使用XMLHttpRequest对象是实现AJAX技术的第一步
*/
function GetXmlHttpRequest()
{
var xmlHttp=null;
/*
*由于不同的浏览器使用不同的方法创建XMLHttpRequst对象
*例如IE使用的是ActiveXObject
*所以在这里使用try-catch嵌套形式创建该对象
*/
try
{
xmlHttp = new XMLHttpRequest();//对于Firefox等浏览器
}
catch(e)
{
try{
xmlHttp = new ActiveXObject("Msxm12.XMLHTTP");//对于IE浏览器
}
catch(e)
{
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
xmlHttp = false;//若返回false,表示创建对象失败
}
}
} return xmlHttp; //返回XMLHttpRequest对象
} function sendRequest() //发送异步请求
{
//获取表单的文本框province的值
var prov_name = document.getElementById("province").value; if((prov_name == null) || (prov_name == ""))
return; xmlHttp = GetXmlHttpRequest();
if(xmlHttp == null)
{
alert("浏览器不支持XmlHttpRequest!");
return;
} //构建请求的URL地址
var url = "ajax.php";
url=url+"?prov="+prov_name; xmlHttp.open("GET",url,true);//使用GET方法打开一个到url的连接,为发出请求做准备
xmlHttp.onreadystatechange = updatePage;//设置一个函数,当服务器处理完请求后调用,名为updatePage
xmlHttp.send(null);//发送请求
} function updatePage() //定义回调函数,处理服务器响应
{ /*
*当readyState属性值为4时,表示相应加载完毕;status属性值为200时,表示一切正常
*更多XMLHttpRequest对象的属性及其含义请参考相关资料
*/
if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
var response = xmlHttp.responseText;//获取服务器返回的数据,以字符串的形式给出
document.getElementById("city").innerHTML = response;//设置内部HTML为response的内容
}
}
</script> </head> <body>
<h3>请选择一个省(自治区):</h3> <form action="ajax.php">
<div>
<select id="province" onchange="sendRequest()">
<option value="">请选择一个省(自治区)</option>
<option value="ah">安徽</option>
<option value="fj">福建</option>
<option value="gs">甘肃</option>
<option value="gd">广东</option>
<option value="gx">广西</option>
<option value="gz">贵州</option>
<option value="hn">海南</option>
<option value="hb">河北</option>
<option value="hh">河南</option>
<option value="hl">黑龙江</option>
</select>
</div>
</form> <div id="city">
</div> </body>
</html>

再来看看服务器端的PHP代码,ajax.php

 <?php
$city_arr = array(
"ah"=>"合肥",
"fj"=>"福州",
"gs"=>"兰州",
"gd"=>"广州",
"gx"=>"南宁",
"gz"=>"贵阳",
"hn"=>"海口",
"hb"=>"石家庄",
"hh"=>"郑州",
"hl"=>"哈尔滨"
); if(!empty($_Get['prov'])){
$prov = $_GET['prov'];//获取GET请求中的prov参数
echo $prov ;
echo iconv("GB2312","UTF-8",'<font color = "red">您没有选择省(自治区)</font>');
//使用PHP的iconv函数做字符编码转换,以便XMLHttpRequest对象能够正确显示数据
}
else
{
$prov = $_GET['prov'];
$city = $city_arr[$prov];
echo iconv("GB2312","UTF-8",'所选省(自治区)省会(首府)为:'.$city);//显示对应的省会(首府)城市
}
?>

大家可以把代码复制一下,好好感受ajax到底是什么东西。我觉得学习是一个由浅入深的过程,有些看不懂的地方可以暂时放一放,先用起来再说。
     另外,这次的例子最后向浏览器相应的是一个字符串,而不是XML。之所以这样安排,是为了便于妹子理解AJAX的工作原理以及使用方法,而不用同时再去学习XML方面的知识,造成过多的压力。

然而,服务器的相应是XML才更符合AJAX的本质。如果浏览器端得到的相应是XML,那么在回调函数中就要实现对XML的处理,最终完成页面内容的更新。至于如何使用PHP处理XML的相关知识和方法,我们下次再说~

————————————————————分割线重出江湖————————————————————

最后聊点别的,不感冒的朋友请直接跳过。

我认识几个父母在自己小时候就离婚的朋友,他们的故事几乎如出一辙:爸妈工作(做生意)很忙,经常不在一起,全家一起吃饭的时间一个星期不到三四次。家里的经济条件越来越好,家的氛围也越来越淡。最后离婚的时候,一个朋友的妈妈问她以后想跟谁一起生活,她的一句话让她妈妈当场流下泪来:“跟谁都一样,反正你们都不管我。”

有些孩子不学好,爸妈一味就只知道训斥,说什么“我在外面挣钱养家,供你上学读书,你还这么不听话?”父母养育儿女,除了把他们“养”大之外,还要“教”他们。总是以忙为理由,跟孩子待在一起的时间少的可怜,成绩不好或者在学校惹事了除了骂还是骂,教过孩子写作业么?平时好好管过孩子么?除了简单粗暴地给钱和把气撒在心智不成熟的孩子身上,还会点什么?

我看见过一条公益广告宣传语,印象很深——再贵的玩具,都比不上爸爸好玩。

周杰伦有一首歌,叫做《我不配》(这会不会暴露我的年龄和品味下限?)。里面有一句歌词:

是我忽略

你不过要人陪

小孩需要人陪,大人也需要人陪。我以后无论工作如何,一定要多回家看看爸妈,哪怕自己工资低给不了多少家用,关心关心他们身体,聊聊最近发生的事,让他们开心点是一点。写着写着,有点想家了。

【原创】我是怎么从零开始教女同学进行php开发的(4)的更多相关文章

  1. cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发

     cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622     ...

  2. 从零开始,创建GitHub团队开发环境

    从零开始,创建GitHub团队开发环境 GitHub提供免费的团队环境,不过免费仓库容量是300MB,请大家注意. 申请GitHub个人账号 1. 使用浏览器访问GitHub主页.如果使用IE,尽量不 ...

  3. 从零开始使用 Webpack 搭建 Vue3 开发环境

    从零开始使用 Webpack 搭建 Vue3 开发环境 创建项目 首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 ...

  4. 我是如何从零开始自学转行IT并进入世界500强实现薪资翻倍?

    本部分内容对应视频链接. 熟悉我的朋友应该知道,我本科及硕士期间所学的专业都是机械相关,毕业两年之后才从零开始自学转行成为一名程序员.当时我写了一篇文章,介绍我的转行经历,很多小伙伴因为我的这篇文章, ...

  5. 从零开始学node(一): nodejs开发环境的配置

    从零开始学node系列(一): nodejs环境安装 一.安装node.js 1. node官网,node安装十分方便快捷,所以这一步还是很顺利的. 2. webstorm是一款强大的前端开发IDE, ...

  6. 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)

    对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...

  7. 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)

    在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...

  8. 【读书笔记《Android游戏编程之从零开始》】18.游戏开发基础(碰撞检测)

    1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如 ...

  9. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)

    1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...

随机推荐

  1. C#实现:给定任意数字,输出在该数字下所有()括号的集合

    class Program { static void Main(string[] args) { getPairs(, , , , ""); Console.ReadKey(); ...

  2. js跨域访问

    什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...

  3. cnavas

    1.创建一个画布eg:<cnavas width=100px;height=100px; style="border:1px solid rgba(242 ,54,33,0.1)&qu ...

  4. 【温故Delphi】GAEA用到Win32 API目录

    Delphi是Windows平台下著名的快速应用程序开发工具,它在VCL中封装并使用了大量的Win32 API. GAEA基于VCL开发的工具类产品,在程序中使用了大量的Win32 API,将经常用到 ...

  5. C# 基础(8)--网络编程

    套接字,客户端连接服务器,作为进程通讯机制,是基于描述IP地址和端口,是一个通讯链的句柄,其实质就是两个程序通讯用的. 非常类似于电话插座.双方通话的过程,是一方向电话机发出信号和对方从电话机接受信号 ...

  6. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

  7. jQuery基础_3

    DOM:文档处理内部插入:父子级关系$("a").append($("b"))把b插入到a中[a里面的后面]$("b").appendTo( ...

  8. 纯css实现模块阴影变色效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 详细!交叉编译时 note: the mangling of 'va_list' has changed in GCC 4.4解决办法

    为什么要在标题前面加了详细两个字,就是为了吸引看文章的你还有写文章的我这种小白,我是从坑里面爬出来了. 废话少说.... 问题就是这样子了,至于解决办法,在网上搜索了很久,大多数以一段英文作为解决办法 ...

  10. JSON 基础解释.

    JSON.(JavaScript Object Notation) JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本 ...