用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中使用:

  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
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放到$matches
preg_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中!!!

thinkphp-许愿墙-3的更多相关文章

  1. CentOS系统中基于Apache+php+mysql的许愿墙网站的搭建

    1.首先,我们需要两台虚拟机(CentOS7,Linux文本). 2.给两台虚拟机配置网络环境分别为桥接模式 CentOS7 ip为192.168.100.139.24,linux文本ip为192.1 ...

  2. 基于Apache+php+mysql的许愿墙网站的搭建create database xyq; //创建xyq数据库

    1.准备CentOS7与CentOS5的基础配置 2.在两台虚拟机中配置yum. 3.在CentOS7中安装httpd与php与php-mysql PS:截图时已安装 CentOS7 关闭防火墙与se ...

  3. 【jquery】jquery 实现许愿墙效果,可拖拽

    最近整理做过的项目,发现有个许愿墙的效果,今天拿出来给大家分享下. 先简单的介绍下功能点: 随机显示背景图或背景色 出现的位置随机 可以通过拖拽改变位置 好了,附上代码: <!doctype h ...

  4. 许愿墙的搭建基于mysql

    首先需要两个服务器(也可以用一台,但不推荐) 1服务器用yum安装Apache+php+php-mysql 2服务器用yum安装mysql 1服务器 用yum安装Apache和php+php-mysq ...

  5. 许愿墙的搭建(基于Apache+php+mysql)

    一.准备部分:CentOS 7  , Linux 文本   各自配置好环境 二. CentOS 7准备如下: yum install httpd -y #安装httpd yum install php ...

  6. linux 搭建php网站许愿墙

    网站素材在:https://i.cnblogs.com/Files.aspx 首先需要搭建本地yum源,详情参考: http://www.cnblogs.com/jw35/p/5967677.html ...

  7. 许愿墙JQ

    <!doctype html> <html> <head>     <meta charset="utf-8">     <t ...

  8. thinkphp学习笔记13-15集

    13集: ThinkPHP3.1.3使用视频教程--后台登录验证与自动运行方法_标清.flv 14集: ThinkPHP3.1.3使用视频教程--自定义SESSION处理DB驱动与添加Redis处理驱 ...

  9. [转载]jquery版小型婚礼(可动态添加祝福语)

    原文链接:http://www.cnblogs.com/tattoo/p/3788019.html 前两天在网上不小心看到“js许愿墙”这几个字,我的神经就全部被调动了.然后就开始我 的百度生涯,一直 ...

  10. jquery版小型婚礼(可动态添加祝福语)

    前两天在网上不小心看到“js许愿墙”这几个字,我的神经就全部被调动了.然后就开始我的百度生涯,一直寻觅许愿墙背景图片和便利贴图片,觅了好久……一直没找到满意的……无意间看到祝福语和一些卡通婚礼图片.最 ...

随机推荐

  1. 警告 “util.NativeCodeLoader: Unable to load native-hadoop library for your platform”

    http://blog.csdn.net/sagaryu/article/details/52137989 我的是2.6.4,用上面链接提供的编译好的资源覆盖原来的就好了. 不管也没事. 就是因为系统 ...

  2. crawler:简要了解一下PhantomJS

    有时,我们需要浏览器处理网页,但并不需要浏览,比如生成网页的截图.抓取网页数据等操作.PhantomJS的功能,就是提供一个浏览器环境的命令行接口,你可以把它看作一个“虚拟浏览器”,除了不能浏览,其他 ...

  3. 拼装query的sql语句

    com.kingdee.bos.metadata.query.util.QuerySqlAccessBase //打开一个绑定query界面,获取query查询的最终sql,231行

  4. 数据结构算法C语言实现(三十二)--- 9.1静态查找表

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  5. Io 异常: The Network Adapter could not establish the connection 解决方法

    1.IP错误: 在设置URL时错误,例如:jdbc:oracle:thin:@192.168.1.80:1521:orcl 数据库服务器是否正确:ping 服务器IP是否通畅.ping不通则将URL更 ...

  6. jQuery—DOM操作

    摘抄自<锋利的jQuery> 一.查找节点 1.查找元素节点 var li_txt = $li.text(); 2.查找属性节点 var p_txt = $para.attr(" ...

  7. elk系列2之multiline模块的使用

    preface 上回说道了elk的安装以及kibana的简单搜索语法,还有logstash的input,output的语法,但是我们在使用中发现了一个问题,我们知道,elk是每一行为一个事件,像Jav ...

  8. HTTP,TCP/IP协议

    本文转自cnblogs:http://www.cnblogs.com/xhwy/archive/2012/03/03/2378293.html 一.概述 1.1 TCP   HTTP   UDP: 都 ...

  9. CSS的4种引入方式及优先级

    第一:css的四种引入方式 1.行内样式 最直接最简单的一种,直接对HTML标签使用style="",例如: <p style="color:#F00; " ...

  10. Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

    前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fi ...