用jquery写异步传递的时候,

首先要判断表单中的输入是否为空:
如果有多个输入项, 应该, 分别的, 一步一步的来判断是否为空, 而不是用 and / or来复合判断!
同时如果为空, 应该将它设为焦点. $('input[name= username]').focus();
而且, 每个if后如果 出错, 就要 return, 不要再往下判断执行了!

在think的模板html文件中, 的 "任意地方" --- head中, css中, script>中, body>中 都可以解析think的模板, 如{$assing_var} {U('handle')}等等.

在js 链接文件中, 如何获得 U()方法地址?

  • 首先不能直接在js外部链接文件中获得U() 方法地址,
  • 其次, 应该通过在模板文件中的 script脚本段落, 中获得 U方法 这个 "全局的" 链接 地址, 然后在js文件中使用.

在head头部的css文件,和 外部链接的js文件, 就像 " c/c++ 中 的 包含文件 # include 一样", 当它们解析 "展开"来后, 就好象他们是在同一目录位置的地方, 于是, 它们之间的内容 就在同一个文件, 同一个作用域 内, 相互之间 完全 相互可见"!!

注意, 对于分组项目, U(方法)不支持当前子项目的方法, 要写全: 把子分组项目也要写上:
var handleUrl = {:U('Index/Index/handle')}.

ajax和post异步请求的区别?

  1. 如果用ajax, 则所有内容都放在 {..., key: value}中,
  2. 如果用$.post, 则不用key:value形式, 而是 直接写 $.post(url, [data], [callback],[type]);
  3. post不支持 异步失败时的回调函数, 要支持失败时的回调函数, 请用 ajax
  4. 发送的数据中的 key 不要加引号, 对于value: 要根据具体的 "数据类型" 来决定是否加引号, 只有当值为字符串类型时, 才加上引号, 如果为数字, bool, 也可以是"javascript 变量和js函数"(js等变量可以出现在 任何地方)则不能加引号!!

判断页面是否是 经过ajax提交的? 使用 $this->isAjax(); 或者: if(!IS_AJAX) halt('页面不存在');

firebug, swarm 英[swɔːm] 美[swɔrm] n. 蜂群, 一大群, vt. 云集, 挤满.

定制thinkphp的错误页面?

  1. 错误页面, 可以直接写 if(!IS_AJAX) halt('页面不存在');

  2. 也可以写成 模板错误页面:
    配置项: 'TMPL_EXCEPTION_FILE' => './Public/Tpl/error.html' 注意配置文件中的./ 相对路径 是项目的入口文件index.php

  3. 要在 "模板错误页面中使用 halt('错误信息') 提交过来的错误信息, 要在error.html中使用: <? php echo $e['message'] ?>

  4. 特别注意的是 在定制的 模板错误页面, 都 完全 不能使用 模板标签, {$e['message']} 不会被解析! 只能使用原生的php语法.

  5. 要跳转回 首页页面, 可以使用 thinkphp的常量: _ _ APP_ _.

  6. js中, 一个浏览器 window对象( 不要大写W), 是指浏览器的整个 窗口, 包括浏览器的标题, "地址栏(这个最重要, js主要是针对这个js对象操作的"), 显示的"客户区"

  7. 要写浏览器地址自动跳转:
    <script type="text/javascript"> window.onload = function () { setTimeout(function(){ window.location.href = '<?php echo __APP__; ?>'; }, 5000); } </script>

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

thinkphp的结构 要常常去 通过查看 阅读 Think的源码, 会了解很多很多重要的东西!

think的大小是4~5MB

其ThinkPHP.php是框架的入口文件, 主要是定义一些 think 的 系统常量, 如: THINK_PATH等等.

然后, 是common文件夹, 其下有: common.php是基础函数库, functions.php是标准模式的公共函数库, runtime.php是运行时库.
//其中这些里面的函数, 是全局函数,像所有的 "单字母" 函数都是, 所以它们是不需要通过类对象来调用的!!

然后, 是Conf文件夹, 是系统配置文件, 是alias.php, convention.php等

然后, 是Extend文件夹, 是一些扩展.
然后, 是Lang文件夹, 包括en_us.php 和 zh_cn.php, 是返回 return array(.... )数组供其他文件调用! 主要是 一些键的中文/英文名称.

然后是, Lib文件夹, 这个是整个thinkphp的核心. 包括 Behavior文件夹 Lib文件夹 Driver文件夹 Template文件夹

  • Behavior文件夹(定义各种行为类),

  • Core件夹(核心类和基类, Behavior目录中的类都是从这个目录中的abstract class Behavior抽象基类派生的),

  • Driver文件夹(定义驱动器类,包括Cache驱动器,Db驱动器, TagLib驱动器),

  • Template文件夹(包括TagLib标签库解析类和ThinkTemplate模板引擎类).

其中, Core文件夹包括: 整个框架的核心类:
+ Action.class.php 是控制器的抽象基类: abstract class Action{..}, 里面有很多public (注意访问权限)protected成员函数.

        + App.class.php 是应用程序类. 由它将整个程序实例化. 成员函数全部都是静态公共函数: static public init,  exec, run,...在这个里面实现程序实例化!+ abstract class Behavior是行为类的 抽象基类.+View.class.php视图类的基类view中的display()是调用自身的 fetch()函数,和 render()函数来的...里面有默认的$templateFile....
    /*** 运行应用实例 入口文件使用的快捷方法* @access public* @return void*/static public function run() {// 项目初始化标签tag('app_init');App::init();// 项目开始标签tag('app_begin');// Session初始化session(C('SESSION_OPTIONS'));// 记录应用初始化时间G('initTime');App::exec();// 项目结束标签tag('app_end');return ;}

最后, 是Tpl文件夹, 包括一些系统定义的模板文件, 如 显示的首页 thinkphp欢迎页面: default_index.tpl dispatch_jump.tpl路由分发跳转, page_trace.tpl页面追踪

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

一个<?php.... ?>称为一个php块, 一个类的定义, 必须在一个php块内完成, 下面的定义是无效的:

<?php
class foo{
}
?>
<?php
public function foo(){
....
}
?>

在php中, 一个变量只能有一个美元符合$: 所以, $a->b是正确的, 表示a这个对象中的b成员变量, 这个$符合作用于整个a->b, 相当于:$(a->b) , 如果写成$a->$b就是两个变量$a, 和$b, 它们中间用->连接, 就在语法上是错误的: 两个变量之间是不能用 - 来连接的. 除非 $b='???', 而???刚好是$a对象的成员变量, 这个相当于变量替换.

$this 被叫做 伪变量...

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

如何替换网页中的表情? replace_phiz()函数的写法?

表情, phiz [fiz] 不是[fizi], 表示网页中的表情 "笑脸, 抓狂..."等等. $phiz = array(....);

// 在common.php通用文件中, 不能使用 相对根路径, 而是要使用 __ROOT__等全局路径
function replace_phiz($content){//正则匹配出phiz放到$matchespreg_match_all('/\[.*?\]/is', $content, $arr);if($arr[0]){$phiz = F('phiz','','./Data/');foreach($arr[0] as $v){foreach($phiz as $k=>$val){if($v == '['.$val.']') {   /* $v是[抱抱], 而$val是 "抱抱",所以要加上两边的 中括号.$content = str_replace($v, '<img src="'.__ROOT__.'/Public/Images/Phiz/'.$k.'.gif" />', $content);break;  // 视频教程上是在 if 语句的下面一句写 continue, 但是我认为这里应该是break!}}}}
}==================================================

Model类的public function data等方法, 返回的是$this, 所以可以应用链式调用...

$GLOBALS跟$_POST, $_GET一样, 是所谓的"超全局变量", 也只是在 同一个 文件 域内有效, 不能跨文件生效, 只是说, 在同一文件的函数内部, 不用声明global就可以使用的变量.


var_dump和var_export的区别?

var_dump默认就会输出, 而且,如果带多个参数, 就是输出这多个参数的 "类型(值)"格式.
var_export默认不会输出, 而且 当第2 个参数为true时, var_export返回的 是 合法的php 代码, 这时, 这个代码string字符串, 就可以直接写到文件中去.

写文件的两种方式?

  • 一是, 用传统的 : fopen(), 然后写fwrite(), 最后关闭fclose().

  • 二是, 用快捷的函数: file_put_contents(string $filename, string $data); //这个函数就等于执行了上面的三个函数! 这个data可以是字符串, 也可以是数组...

  • 最重要的是, 要记住: 当要往文件中写入 php代码时, 一定要记得写上: ?php .... ?> , 因为你的php代码不可能直接就放在 甩在文件里, 而且变量的输出, 不能直接变量,(因为该变量会被作为代码 被执行...而出错), 而是要把变量通过 var_export($变量)来转换成字符串相连接, 如:

      ```$data = '<?php return '. var_export($phiz, true). ';?>';file_put_contents('./Data/phiz.php', $data);```

从文件中读取内容, 如果 该文件是php文件, 那么就不能用 file_get_contents($filename) 这个函数, 因为这个函数在读取php文件的时候, 遇到{?php...?>的时候 会出错, 要用 $phiz = include './Data/phiz.php'; 这样的方式!!

这也就明白了之前说的: include是包含文件, 同时它还会执行 文件, 当这个文件是php文件的时候, 它会解析其中的内容: 比如这个文件是

<?php return array(....);
?>

## 那么include后, 它就真的会得到一个数组.

主要靠细心体会, 键位的移动是很细微, 很细微,很微妙的, 6789食指和中指稍向左移, 无名指则竖直向上, 小指则平行斜向上移动(分别管两个).[p略微向左移动一点, [, 略微靠右一点, ]又略微靠右一点,\最大. 要坚决杜绝用无名指去操作退格键.

echo只能打印简单变量, 不能打印输出 "数组" 当echo $array时, 只会{输出 Array}. 要用dump()等函数来打印数组!

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

thinkphp 的F()函数: 快速的 "写入数组" 或者 "读取文件".

默认的是一个缓存, 实际上可以用来 读 和 写 数组.

/*** 快速文件数据   "读取"  和 "保存(写入)  针对简单类型 数据  字符串、"数组" * @param string $name 缓存名称* @param mixed $value 缓存值* @param string $path 缓存路径* @return mixed*/// $name是缓存文件名, 不包括扩展名;
// $value: 在写入数组的时候, 是数组$array的值, 在要读文件的时候, 这个$value=''为空;
// $path 是缓存文件保存的路径, 当不存在时, 函数会去自动创建function F($name, $value='', $path=DATA_PATH) {static $_cache  = array();!!!!    $filename       = $path . $name . '.php'; // 默认的文件是php, $path要带上 "/".// .....return $value;  // return 会返回缓存的文件内容, 也就是说, 可以获得, 读取文件内容.
}比如, 要 写入 并读出 表情数组: F('phiz', $phiz, './Data/')'              // 写入$phiz;$phiz2 = F('phiz', '', './Data/');        // 读出文件内容.

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

php中, 字符串和变量相连, 或者说字符串中包含变量的情况下, "高手"的用法: 一律是 用单引号, 然后用点号 与变量 相连. 而基本上没有用双引号包含替换的.

为什么php中的 字符串要用单引号? 本来双引号和单引号是 基本相同的(除开变量替换外). 但是, 字符串用单引号, 这样就便于写html/css中的属性的时候, 用双引号括起来: var str='<html attr="some_attr"'; var str2 = 'css: body{color: "red"; } ';

think或原生的php的ajaxReturn返回, 都一定要 指明 返回数据的 $data 的['status'] =0,或=1, 这样便于 js客户端来判断 ajax是否成功, 以及js中的 回调函数的处理...

要在字符串中间, "嵌入"变量的方法是: 在嵌入的地方, 先写上: '+ +' , 然后再在两个加号之间放入变量: 'abcd' ==> 'ab'+ $var +'cd'

在ajax中, 当客户端 需要 某个服务器端变量的时候, 就在服务器端把这个变量 封装在要返回的数据data中!!!

转载于:https://www.cnblogs.com/bkylee/p/5306968.html

thinkphp-许愿墙-3相关推荐

  1. 没有必要对着手机的记事本来记录太多的东西:尝试一下许愿墙的模式吧

    随感 最好的方式还是用纸和笔来记录 然后整合在一面墙上 很棒和协作方法 不会忘记事情 注意 人最多只能一次记录7个事情,如果她们都是causal的,大概率是这样的 很棒的方式 就像一个许愿墙一样 完成 ...

  2. java许愿墙_18.JavaScript实现许愿墙效果

    JavaScript实现许愿墙效果: Document margin:0; } .paper { position: fixed; left: 200px; top: 200px; width: 20 ...

  3. java许愿墙_wishingWall 一个好看的许愿墙板块,功能强大,页面美观 Java Develop 238万源代码下载- www.pudn.com...

    文件名称: wishingWall下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1839 KB 上传时间: 2013-04-25 下载次数: 6 提 供 者: ...

  4. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线

    大家好~我是c站的一个小博主,我会定期更新博文,本篇是围绕微信小程序基于腾讯云开发展开的一个项目,如果看着还不错,或者对您有帮助的话,可以进我的专栏看看我的小程序的其他作品https://blog.c ...

  5. 一个简简单单的许愿墙

    石家庄邮电职业技术学院专属活动第2期:[校园前端学习笔记]主题征文 石家庄邮电职业技术学院社区 学号后四位:(必填)0219 邀请人ID:(非必填) 知识点 对整体布局的考察,边框线的设置,边距的调整 ...

  6. php许愿墙mysql,许愿墙—许下你的愿望

    从网上找了一个很漂亮的许愿墙模板,早上就花了一段时间写了这个许愿墙程序,给大家分享下. 首先我们遍历出所有的许愿列表:$query = mysql_query("select * from ...

  7. 许愿神器来了 ,30行Python打造了一款许愿墙,希望能追到女神!

    公众号 "菜鸟学Python", 设为 "星标" 第447篇原创,和30w+一起学Python! 不知道大家有没有这样的想法,自己总想着能够通过许愿的方式,来祈 ...

  8. 许愿墙 – javaee 项目实战(一)

    Technorati 标签: java,javaee项目 发现自己无法完整地写出一个网页的源代码,便只能借助别人的源码来研究当中涉及的技术,希望久而久之可以提高自己的技术水平. 一.概述 许愿墙是指可 ...

  9. 微信小程序 | 基于云数据库的许愿墙

    CSDN话题挑战赛第2期 参赛话题:学习笔记 本实训项目以云开发的云数据库为基础,制作一个简易的许愿墙. 01.实训内容 本实训项目以云开发的云数据库为基础,制作一个简易的许愿墙,顾名思义" ...

  10. java许愿墙_许愿墙的实现

    看到有的应用是网上的许愿墙,就是用户写些祝福,然后象小纸条那样,粘贴在网上,好多人都写 都叠在一起了,用户可以关闭每个小纸条,可以移动.实现起来其实就是javascript 首先是把用户填写的留言都保 ...

最新文章

  1. iPhone内运行python,返回Killed: 9 ,iOS内安装python2.7等问题的解决方法
  2. Window7文件共享之法 [转载]
  3. 本地windows主机无法访问虚拟机里主机解决办法
  4. flex 正则表达式匹配规则
  5. 移动端堆栈关键行定位的新思路
  6. Cocoapods的Podfile常见语法总结
  7. hashmap value为null_从这五个方面看hashmap,新手一遍就能懂
  8. OpenGL学习笔记:颜色(RGBA颜色,颜色索引模式)
  9. html5集成远程控制,HP MicroServer Gen8 ILO4官方固件2.70安装及中文设置,远程控制台新增支持html5...
  10. 淘宝搜索算法综述之一:淘宝搜索的特点
  11. 刚体转动惯量c语言计算程序,Tracker软件在三线摆测量刚体转动惯量实验中的应用...
  12. 基于python的异方差检验_异方差检验及解决方法
  13. 浅谈外存分配的几种方式
  14. 方程检验格式图片_Excel绘制标准曲线全图片教程
  15. python中开平方如何表示_python平方怎么表示
  16. 电脑误删的文件怎么恢复?分享90%的人都会的这2招
  17. 9flash:个人网站商业化之蜕
  18. 怎样将PPT文件进行压缩?这几步很简单
  19. 解决binwalk提取需要权限问题,binwalk提取文件报错。
  20. arduino的学习过程

热门文章

  1. javascript滚动到顶部scrollTop用法
  2. 充值系列——充值系统业务逻辑层实现(三)
  3. 华为交换机命令配置大全,看完赶快收藏
  4. iOS 文字渐变色的实现
  5. 右键word(docx)丢失问题
  6. 内容耦合 c语言例子,耦合性 内聚加实例
  7. 毕业后这一年,工作/生活经验回顾
  8. 职业人四种学习方法(转)
  9. 数一、数二、数三的区别
  10. 嵌入式开发这个行业状况