香~
1.在写样式时候,如给一个box做了固定定位,平时我只写top:0;left:0,那么这个box的宽是不会自动撑满全屏100%宽的,只需要再加一个right:0,即可撑满百分百宽度(PS:以前觉得都写了left了还写right,或者写了top,还写bottom 不是多余么,现在觉得真香)
2.input表单的隐藏域:专门用于不想在前端显示,但能给后台提交数据使用。
比如我们要修改一个表单的信息,我们发送给后台数据肯定要携带id,后台拿到id后,才能去数据库中找到是要修改的是哪一条的数据id,但是这个html中这个表单中压根就没有id这一项,UI显示也不想让多一行显示个id,对此我们有两种解决办法:
1》 <input type="text" name="id" value="<?php echo $data['id'] ?>" style="display:none" > //我们通过display:none去把这个表单给隐藏掉,但是数据还是能提交过去的,因为按照浏览器渲染页面出来要经历四个步骤:
(1) DOM tree 和CSS tree 结构
(2) render tree 渲染树并不等同于 DOM 树,因为一些像Header或display:none的东西就没必要放在渲染树中了。
(3) layout 布局 有了dom和css的从属关系,计算出每个节点在屏幕中的位置。
(4) paint 渲染
由此可见,当我们在代码中提交数据的时候,我们其实已经把数据发送给你后台了,然后前端才会可能会重定向或者刷新当前页面,不管是刷新页面还是重定向跳转到其他页面,都是把现有的html文件再重新一次走了浏览器渲染的四个步骤,至于display:none了没有也是下次渲染出来后的结果,但是在渲染前,数据已经发出去了。
但是:这种方式有点太啰嗦了
2》<input type="hidden" name="id" value="<?php echo $data['id'] ?>" > // 用input的 type类型为hidden,就可以实现同样的需求。
3.为啥表单提交不受跨域限制,ajax会有跨域问题?
实际上表单提交是浏览器代替用户配置了一份请求,他还是用户提出了,是用户明确的提出的,而ajax是在背后默默的运行,但是用户不知道,会有安全隐患。
ajax之所以不能跨域,跟服务器半毛钱关系都没有,ajax发出的请求是通过浏览器,浏览器去告诉服务器,服务器会把数据返回给浏览器,浏览器拿到服务器返回的数据会去检查数据的来源,(浏览器会去检查它发出去的请求是拿到的数据是不是在同一个域下),这是也所谓的同源策略。那么浏览器会把服务器传来的数据给拦截掉。
跨域解决办法:需要服务器返回数据的时候给个声明:就是告诉浏览器尽管ajax发出的请求和服务器返回的数据不在一个域下,但是告诉浏览器ajax的这个请求"我"能接受,“你”浏览器就放我返回的这条数据过去把。服务器就是设置一个响应头即可。
同源策略的意义:ajax发出的请求,要去访问自己的服务器,浏览器不阻拦;要是访问别人的服务器,就会阻拦;这样是浏览器处于安全考虑。