Web开发的一点儿心得

因为工作需要,最近做了一点Web开发,类似XX管理系统的东西。后台用PHP和同事开发的MVC框架。前端就是Html/Javscript/CSS和jQuery、Bootstrap两大常用前端库。以前也折腾过这些东西,算是有点儿经验,不过并没有深入,更谈不上实战经验。这里作为一个菜鸟总结一下碰到的问题和学到的东西。

PHP和后台

PHP世界上最好的语言!

PHP开发还是比较容易上手的。语法比较直接,有点编程经验的人都不难理解,而且内置了丰富的函数库,Web开发常用的功能应有尽有。另外,Web后台开发相比常驻Server要简单不少。从浏览器访问一次页面,就调用一次对应的PHP脚本,顺序执行其中的操作,完成后退出。既不需要考虑多线程之类的问题,也没有内存泄漏这样的风险。

开发过程中遇到的一个印象比较深刻的坑是在遍历数组的时候。通常都是这样写:

foreach ($some_array as $some_element) {
    // do something
}

这样遍历数组其实是只读的,因为遍历过程中PHP会把$some_array每个元素的值拷贝到$some_element,对$some_element的修改不会影响到$some_array。如果需要修改$some_array中元素的值,需要想下面这样写。这时$some_element就不在是一个拷贝,而是一个引用了。

foreach ($some_array as &$some_element) {
    // do something
}

jQuery

jQuery是前端开发的一大神器,它可以做的事情很多,不过我主要用来实现AJAX。印象中AJAX也是曾经被追捧上天的一项Web开发技术。虽然并不复杂,但是相比以前提交表单的方式,确实大大提升了用户体验。简单讲,AJAX就是在网页上用Javscript通过HTTP请求从后台获取数据,然后通过DOM操作部分更新页面内容。要实现AJAX,主要需要两块功能,一个是向后台发送XMLHttpRequest获取数据,另一个是操作DOM节点修改页面。

对于前者,jQuery提供了ajax()函数。用法如下:

$.ajax({
    type: "GET",           // 请求方法,支持GET和POST
    url: "test.php",       // 请求地址
    data: {             // 请求参数,这里是一个javascript的对象,
        param1: "val1", // jQuery会自动将其转换成
        param2: "val2", // &param1=val1&param2=val2 这种形式
    },
    dataType: "json",     // 返回数据格式,用json便于前端处理
    success: function(data) {
        // 请求成功的回调函数
    },
    error: function(data) {
        // 请求失败的回调函数
    },
    complete: function(data) {
        // 请求完成的回调函数,不论成功与否都会执行
    }
});

这里只列出了最主要的几个参数,更详细的说明可以参考W3School的教程。这里有一个坑是,当指定dataType为json的时候,jQuery会尝试解析响应并转换成对象传递给success回调函数。如果解析成功,那么success回调的参数data就是一个对象。但是实际使用中却出现了后台返回了合法的json字符串,但是jQuery却解析失败的情况。这时就要去掉dataType参数,让jQuery把后台响应文本直接传递给success回调函数,然后自己对json串进行解析。解析的方法如下:

eval("obj = " + data);

或者

obj = eval("(" + data + ")");

对于DOM操作,jQuery提供了CSS风格的DOM选择器,主要是下面三种形式:

  1. $('tag_name'),选择某一标签类型的所有DOM节点,比如$('div')就是选择所有div标签;
  2. $('.class_name'),选择某一class的所有DOM节点;
  3. $('#id'),选择指定ID的DOM节点。

不同选择方式可以配合使用,比如$('div.some_class')就是选择所有class为some_class的div标签。$()选择器返回的结果是一个DOM对象的数组,然后可以对这些节点进行操作。常用的操作有:

  1. attr(),获取或设置节点属性,比如class、style等;
  2. html(),text(),获得或设置节点的内容;
  3. val(),获得或设置节点的value属性,比如文本输入框的value就是其中填写的内容。

这些操作只对选择器返回结果数组的第一项有效,如果结果超过一个,就要通过下标取出其中的DOM节点,直接修改innerHTML、innerText、style等属性。其实不用jQuery,也是可以操作DOM节点的,如果你愿意多敲几下键盘,使用getElementById()和getElementsByClassName()等函数,也可以达到同样的效果。

Bootstrap

之前完全没有接触过Bootstrap,这次是赶鸭子上架,硬着头皮去折腾,到现在也知之甚少。目前只用到了它的网格系统进行页面布局。这里我就不再献丑了。推荐看一下这里的教程

前端调试

Firefox和Chrome是前端开发和调试的两大利器,两者都自带强大的开发者工具,比IE不知道高到哪里去了。个人更习惯用Firefox,用快捷键Ctrl + Alt + I打开开发者工具,里面有很多标签页,这里简单说几个我觉得对初学者特别有用的。

查看器(Inspector)用来查看页面上的元素,包括对应的HTML源码和CSS属性。我觉得这个对于初学者特别有用。学习阶段总少不了要去模仿,这个工具可以帮你快速定位到页面上的元素,查看对应的源码,便于学习。点一下左上角的箭头图标,还可以直接用鼠标选取元素,方便快捷。查看器里面还可以直接修改元素的style,用来试验风格和布局再好不过。

控制台(Console)是一个javascript的REPL,用来执行和调试javascript代码。平常调试C/C++代码,最简单粗暴的方式就是printf。在javascript里,也可以用console.log()直接打日志到控制台来调试。控制台共享了当前页面的上下文信息(包括页面引用的js库,比如jQuery),在这里执行javascript跟在页面上是完全一样的。所以在进行AJAX开发时,如果遇到某些不确定的用法,可以现在这里进行一下试验。控制台还有一个很有用的地方是,可以通过javascript的DOM操作修改页面元素的属性,在修改页面之前,可以用这种方式先预览一下效果。

网络(Network)面板用于监控浏览器的网络请求,这里可以看到每个HTTP请求和响应的详细信息,在调试AJAX的前后台交互的时候非常有用,可以直接看到请求的完整响应,不需要再用打日志这种笨办法。另外,还可以用这里的“编辑重发”功能,通过调整参数重发请求,来辅助后台问题的定位。

一些资源

关于Web开发的资源,首推W3School,其丰富的文档涵盖了Web开发的方方面面,有教程也有参考手册,还提供了自己动手实验的环境,堪称初学者的福音。另外我最近发现的菜鸟教程也很不错,上面的内容甚至比W3School还要丰富得多,连Go语言和Docker这些比较新的后台技术也有。Bootstrap方面,除了菜鸟教程,Bootstrap中文网也是很好的资源。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,641评论 18 503
  • 临渊目断烟波渺,叠浪连天倒。 崩云裂岸古来同,犹自酹江倾盏醉濛鸿。 千秋日月浮沉处,不见归尘路。 驾舟东去访瀛州,...
    雾敛云收阅读 345评论 1 16
  • 如果你养了一位“沉睡的巨人”(臀部是身体最大的肌肉),那么会发生什么情况呢? 臀大肌是负责髋伸展的肌肉,走路、爬楼...
    七虞106阅读 2,972评论 0 0
  • wytc阅读 119评论 0 0
  • 错综复杂的轨道从窗外呼啸而过,闷热的天空有点阴沉。 划过一排绿荫时,车窗上留下了一道细长的水线,但很快它便与迅速后...
    行修小生阅读 611评论 2 4