Ipan笔记-2

其实二级联动下拉选择框很简单的, 参考: https://www.cnblogs.com/zhangmiaomiao/p/6013533.html

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

关于$.each和 $().each()的区别

  • 前者可以遍历任何对象或数组, 后者只能遍历jquery的对象数组;

  • 后者由于已经明确指出了被遍历的对象, 因此,each后面的参数就只有一个, 即回调函数了,而前者由于没有指明被遍历的对象,所以第一个参数是 被遍历的数组或对象,第二个参数才是回调函数

  • 既然是遍历,在后面的callback函数中的参数,就是直接、已经从被遍历的对象、数组中取出来的子元素了,不再是原来的对象或数组

  • 如果是遍历数组, 则回调函数中的第一个参数是元素的下标索引数字,从0开始, 比如: 0,1,2...第二个参数是数组元素的值; 如果是遍历的对象,比如: {name:‘jack’,age:20,address:‘some place'} 则回调函数中的第一个参数不再是下标数字了,(对象没有下标的概念)表示的是 对象中成员变量的名称即: mem_name, 比如:name, age, address.第二个参数是成员变量的值,比如: jack,20,...

  • 这个遍历中, 类似for或 while结构, 但是循环的控制, 不再是用break或 continue, 而是用 return false=break,或 return true=continue来控制。

<script>
var arr=[1,3,5];
var obj={name: 'jack', age: 20, address: 'Street Lincon'};
$.each(arr, function(i, x){
		alert("this is " +i +" element and value is: " + x);
});
$.each(obj, function(mem_name, mem_value){
		alert("this is '" + mem_name +"' element and value is: " + mem_value);
});
</script>

ajax中的 $.get(), 和 $.getJson()的区别?

其实两者都是差不多的,只是前者由于没有指明服务器返回数据的类型,所以要在最后一个参数中指明’json’,而后一个函数由于已经明确说了 getJson, 所以就不用写返回类型了, 最多就是三个参数。

** jquery中的val函数,是一个专门的函数,就是用来获取表单中各种输入控件的值。比如select选择框的值:$('select').val() **

$(...).remove和empty的区别?

$(...).remove从字面上的意思,就可以知道, 它是要 (从dom树节点上)删除 被匹配的元素(集合)本身!
$(...).empty, 被匹配的元素,本身不会被删除,只是会清空(删除)它的所有子节点。

同时,要注意, 很多jquery函数的使用方法,比如: $('...').func_name(...)本身可以不带参数, 那么所有被匹配的元素节点都要执行func_name的动作, 也可以在func_name中 指定 过滤选择器, 那么就只是从 匹配元素集 中 再次选择过滤一次, 然后执行动作。

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

jquery中的方法(函数)调用, 是要传递一个参数, 比如:change等, 函数参数不能是 一个语句. 但是可以是 一个 匿名函数: $('select').change(funciton(){...} );

jquery中如何判断一个元素是否显示出来了? (是否存在?) 使用 is 函数 $('selector').is(":visible");

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

jquery中的事件 和 dom元素的事件的 区别?

  • dom元素绑定事件的时候, 原生态的用onclick之类的.
  • 而jquery中的绑定事件, 用的是 click函数 注意此时就不再加on了.

事件和方法的区别? 再次说一下:

  • 方法是 调用的时候, 马上就执行!
  • 而事件是一种伺服机制, 写上事件函数的时候, 函数并不会马上执行, 只有当相应的事件发生时, 函数才会执行. 要注意, jquery中的 click() 是事件而不是马上就会调用的方法!

jquery中的is函数非常重要: is(selector|obj|element|function)

is函数的参数 可以有4种:

  • selector, 判断前面的对象, 是不是 符合 参数指定的 选择器(基本上是 冒号选择器), 可以是 所有的选择器, 比如 :visible, :hidden, :input等等
  • obj, 是一个jquery对象
  • 元素, 判断是不是一个dom元素
  • 函数: 当对每个循环元素进行is 判断的时候, 不是为了 判断这个对象是什么, 而是要 判断 某个 事实, 某种情况的时候, 就可以 使用 function...., 然后在function中 通过return 返回false或true...
### jquery中的选择器, 有很大一类是 冒号选择器(具有 判断 性质的 false/true性质的) 选择器, 除了三种: 基本选择器(类/id/元素) + 层级选择器 + 属性[] 选择器之外, 其他的都是冒号选择器. 也就是 :伪类选择器

data-toggle 和datat-target作用

toggle是切换的, 表示 该元素 要去控制什么动作,
target是目标, 表示该元素控制的 是哪个目标的 动作
比如 li或 a, 的属性data-toggle是控制其他元素的collapse切换动作. 那么是控制 哪个元素的 collapse动作呢, 通过在 li/a 中指定 data-target来确定

所以 被控制的div 必须要有 collapse 类样式, 而其中的 in 类样式, 表示 进入 打开的意思, 在初始的时候, 是折叠的还是显示的.
折叠可以是针对单个的div, 也可以是 一组/多个div对象的相互折叠, 这个就是 手风琴/折叠面板组, 这个时候, 就要指定每个可折叠 div的 父元素 data-parent.

easyui中 , 要使用图标, 采用的样式类是 iconCls, 这个是通用的, 在整个easyui中都是这样应用的: 在tabs标签组中, 要只是显示标签title, 不要 标签后面的条块(背景) 就使用 选项: plain: true.

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

mysql的describe命令

  • mysql中的命令 通常没有省略的, 不可以省略, 是 完整的 动词;
  • describe 后面直接跟 "表名table_name", 不需要 关键字 table
  • describe是 "show columns from .." 的简写

**php中的变量定义: **
= 凡是在$ 符号后面紧跟一个字符串, 就认为是一个php变量;
= php不像c语言, 不支持 给变量: 只定义 不赋值, 赋值初始化的时候, 就是给变量定义了
= php支持 "可变变量" 即: 两个$ $$var 变量的值, 是另一个变量的名字
= 不能像C, javascript等语言一样, 在一行内定义多个 变量, 只能一行定义一个 变量! 即$a=1,$b =2 ; 是错误的

在tp中引入js和css文件
不再使用link和script标签, 直接使用load标签href属性, load标签会自动根据href文件的扩展名来判断类型, 而js和 css是load标签的别名, 语义更清晰.

注意css中 表示 层级 关系 的 几个单词的区别

parent和 child 是父母 和 子女的意思: child 除了小孩这种 广义的泛指之外, 还表示 "自己的子女"!! 所以表示 父子/父母和子女, 不用father/son, 而是用 parent 和 child
ancestor & decendant是 祖先 和 后代/后裔的关系, 不一定是 父母/子女这种直接一代的关系, 可以 所有的 隔了多代的关系.
previ+Next 表示 上一个和下一个, 就是它们之间必须是紧挨着的(当然,而且它们的层级是一样的, 都有共同的父辈parent)
prev~siblings, 表示的是 A元素 后面的 所有同辈, 在层级上是一样的, 都有相同的parent, 但是它们的顺序不一定是紧挨着的. 所以 ~sibling是包含+的, + 是~siblings的特例

jquery的文档说得很清楚, 表示层级关系的就只有这四种:
A B 表示 祖先 子孙 (包括子辈和孙辈...)
A>B表示 父母和子女
A+B表示A后面的 紧挨着的兄弟元素;
A~B表示 A后面的 同辈元素(不一定是紧挨着的)
需要注意的是, 在所有的 层级关系中, 最后选出来的 元素, (样式应用的对像是 B , 不会应用的A元素上) : 都 "落脚于" 后面的那个元素 B 上, 所有的 B元素 都是 A元素 的位置之后的 , 即:都表示: A 后面的 元素B 将要应用的样式!  因为这里使用的是 Prev (这个Prev是前面的, 就表明了它们之间的 在位置上 的 先后关系! ) + 和 ~ 的兄弟元素和 同辈元素 是不包括该元素 前面的 元素的!

所以 使用 加号表示兄弟元素 , 可以起到一些特殊的 选择作用, 比如: <style> li+li{....} 表示 li元素后面 的紧邻 那个li元素将要应用的样式 通常 在多个相同元素中使用 加号 , 会让中间元素应用样式, 但是 第一个元素和最后一个元素 不会被 应用样式, 因为第一个元素之前没有其他元素, 最后一个元素之后没有兄弟元素.

要选出 第一个 子元素. 不能使用 层级 选择符. 因为层级选择符 选出的都是 集合. 是符号条件的所有元素. 所以 要选择第一个 或第一个子元素 , 要使用 冒号选择器(也叫 伪类选择器, 因为 伪类 就是用冒号来表示的 比如 :class) 即 : :first, :first-child, :last-child

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

css中的 float和position的区别?

  • bfc( "谐音:不服从") 表示的是 块级元素 格式化上下文, 表示 html中元素的排列顺序, 总是 块级元素从上到下, inline元素 从左到右
  • float是浮动, 是 属于排版 "图文混排"的语义,
  • position是真正的定位, 要实现 一个元素 b 相对于另一个元素A位置内 定位, 必须要求 父元素 A必须为 position: relative , 不能是static.
  • 正因为, 它们都能在一定程度上 实现相同的效果, 所以 容易混淆 它们的区别, 在于 是否从 文档流中 脱离.
    但是: 不管是 float 还是 position, 都不能 忽略 位于 它们前面的 块级元素, 比如h2, div等 , 这些div或 h2等块级元素由于 要占据 整个整行, 会将它们 挤下来... 因此 就 只能排列在这些块级元素的下面!

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

要清楚php进行 json编码的规则:

  • 如果是 一维数组(没有索引名称的), 则直接编码为 json 数组 , 比如: [1, 2, 3, 'name', true]
  • 如果是一维数组而且 有索引名称的, 则编码为 json 对象, 其中 索引名称为键名, 比如: {'name': 'jack', 'age': 10, 'addr': 'st2'}
  • 如果是二维索引数组, 则编码为json数组, 同时每个元素为一个json对象 [{'name': 'jack', 'age': 10, 'addr': 'st2'}, {'name2': 'jack', 'age': 10, 'addr': 'st2'}, ...]
  • 如果是单个的数字 或 字符串, 编码后, 还是单个的数字或字符串, 不会改变.
####如何调试 ajax传递到php后台的错误? - 由于 在调试 ajax传递到后台的时候, 无法看到/甚至无法调试 后台php文件的错误, 所以跟踪发现问题就很困难, 这时, 应该 选择将 ajax的get, 或 post 传递回来的数据 用 console.log (debug_info) 打印出来. 那么在控制台就会看到 php后台出错的错误信息报告 - 最关键的是, 要看到php远程ajax 页面传递回来的是 html错误报告页面, 就要在post或get中将 dataType明确地设置为 "text,或html,或不设(会自动根据http包的mime信息来判断返回数据的类型)", 但是不能设置为 'json'! 因为设置为 json的话, 就看不到错误信息了! 也就是说, 要是怀疑 ajax出错了的话, 就要将dataType返回类型改为 html, 而不能是看不到错误信息的json ![](https://img2018.cnblogs.com/blog/821299/201812/821299-20181222174444183-858522871.png)
  • 可以在调试时, 开始不忙传递数据进去, 看最简单的情况下, 能不能ajax成功, 就可以看到 是否将ajax请求传递到 后台页面了

function name must be a string? 是说 当我们错误地把 全局变量 , 比如 $_POST, $_COOKIE,$_GET等的元素, 本来应该是 中括号的, 却错误地写成了小括号, 比如:$_post('name') 那么: 因为后面有括号, 首先把它当做是一个函数 调用, 而前面的 $_post 又是以$开头的, 就认为是一个变量, 而变量是不能做函数名的, 必须是用字符串来做函数名

在ajax 的后台处理页面php中, 确实是用 $_POST['name']之类的 来接收 ajax传递过去的数据的, (当然ajax type是post的). 是能够正确的取到的, 如果要查看, 或怀疑数据没有传递过去, 或传递有问题, 你可以直接将 接收到的数据 直接组装成 json结果反回来在 js 控制台查看.

传递的数据 , 确实是写成 js 键值对 对象 形式!

为什么在$.ajax应用中, 出现错误提示: jquery.js的第2行, TypeError: invalid in operand a?

  • 这是由于在 ajax应用中,对从php返回的json数据进行处理时, 调用了jquery中的函数each函数, 而each函数要求的 "in"operand 输入操作数, 必须是一个 javascript的数组或对象.但是 从php返回的json数据 在js看来,只是一个 字符串!! 不是数组或对象. 所以会提示 TypeError
  • 而这里调用的 each函数, 是jquery.js中的一个函数, 正好位于jquery.js文件中的第二行...
  • 解决方法是: 将这个ajax返回的"字面上是对象" 的字符串, 转换为真正的js 数组或对象,方法是: 用javascript语言本身提供的 "JSON"对象的相关方法: JSON.parse(json_format_string) => 得到js的数组或对象 , 而 JSON.stringify(js字母对象) => Json格式的字符串
// javascript中的ajax语句

 
    $.post('/index.php/Home/Index/ajaxHand',{'zyb':zyb,'nj':nj},function(ajaxRet){

        .....

       var res = JSON.parse(ajaxRet);

        console.log('返回结果:'+res);
    });

// 控制器中的方法 ajaxHand

    public function ajaxHand(){
        $zyb = $_POST('zyb');
        $nj = $_POST['nj'];

        $Class = M('class');
        $res = $Class -> where(array('zyb'=>$zyb, 'nj'=>$nj)) -> getField('bj',true);
        echo json_encode($res);
    }

localhost 和 127.0.0.1的区别? 参考 https://blog.csdn.net/JkunZhang/article/details/6066158

  • localhost叫 本地 服务器, 而 127.0.0.1 是本机 服务器ip地址.一个叫 本地, 一个叫 本机, 两者通过host文件进行 转换.
  • localhost 不经过网卡, 不受防火墙和网卡ip地址等的限制; 127.0.0.1 是一个ip地址, 要经过网卡, 要受防火墙和网络地址的限制;
  • localhost不会占用网络资源? 127.0.0.1 和其他ip地址的区别是, 前者 只能通过本机访问, 后机器的本机ip地址 可以从 其他机器访问;
  • 建议通过localhost来访问, 因为 使用 localhost来访问, 是 以当前 本地用户的(控制台的用户) 身份来访问的; 而ip地址访问是以 访客 身份来访问的.
  • 在windows下 localhost 的访问协议 是 TCP/ip 而linux下是 通过 unix socket 套接字来访问的. 所以 有时候会出现 localhost不能访问, 而127地址可以访问的现象,但是 win上没有这种情况.

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

mysql中的 mysql.user表中存放的是 当前 数据库中 有哪些用户, 以及它们的权限等信息, 而 information_schema数据库是存放的当前 运行的 数据库/表的 信息, 是从其他数据库(主要是mysql数据库)中提取信息的 "视图", 所以 很多表 没有 真实的/对应的实体文件. 其中的 information_schema. user_privileges表是存放的当前 内存中, 已经运行的 用户信息和权限.

  • 由于 mysql中 有一个 默认的 普通用户, 是 匿名用户, 是 空'' 用户 : ''@'localhost' 是 很低的用户, 它只有 usage的功能和操作 (只能操作 test数据库) , 没有 grantable, 所以 只能用来 操作 普通的用户自己的数据库, 不能操作 其他系统 数据库. 包括 一般不能创建 新的 数据库等.
#### 当在 url地址后 使用get方法传递参数时, 一定要注意 name=value 传值对中的值, 不能再加 (单/双)引号了, 因为这个值 会按原样 raw的 样子 , 原原本本的赋值给 接受变量. 从而使得 接受到的值带有 多余的 引号, 引起 后面的数据库查询的时候, 出错!

原文地址:https://www.cnblogs.com/bkylee/p/10141109.html