laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)
laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)
一、总结
一句话总结:
优势:用户友好度:异步通信,不会频繁刷新页面,用户友好度比较高
优势:减轻数据库压力
缺点:操作难度相对普通请求大
1、无刷新上传图片如何实现?
找一个无刷新图片上传插件【比如uploadify】,页面中引入插件
路由中any接收一切请求类型:Route::any('shangchuan','CommonController@upload');
控制器中用 Request $request对象获取图片数据即可:都不用像tp一样判断是不是ajax请求
0、插件学习地址
http://www.uploadify.com/demos/
1、页面中必须引入插件 (D:\laravel\yzmedu\yzm2\resources\views\admin\pic\create.blade.php)
<!-- 引入CSS -->
<link rel="stylesheet" href="/up/uploadify.css">
<!-- 引入JQ -->
<script src="/admins/bs/js/jquery.min.js"></script>
<!-- 引入文件上传插件 -->
<script src="/up/jquery.uploadify.min.js"></script> 2、页面中书写页面结构
<div class="form-group">
<label for="">IMG</label>
<input type="file" name="" id="uploads">
<div id="main"> </div>
<input type="hidden" name="img" id="imgs">
</div> 3、JS代码
// 当所有HTML代码都加载完毕
$(function() {
// 声明字符串 var imgs='';
// 使用 uploadify 插件
$('#uploads').uploadify({
// 设置文本
'buttonText' : '图片上传 美照',
// 设置文件传输数据
'formData' : {
'_token':'{{ csrf_token() }}',
'files':'Goods', },
// 上传的flash动画
'swf' : "/up/uploadify.swf",
// 文件上传的地址
'uploader' : "/admin/shangchuan",
// 当文件上传成功
'onUploadSuccess' : function(file, data, response) { // 拼接图片
imgs="<img width='200px' src='/Uploads/Goods/"+data+"'>";
// 展示图片
$("#main").html(imgs);
// 隐藏传递数据
$("#imgs").val(data); }
});
});
4、路由地址
Route::any('shangchuan','CommonController@upload'); 5、控制器 // 公共控制器
class CommonController extends Controller
{
// 文件上传的方法 public function upload(Request $request){
// 获取用户上传的内容
$file=$request->file('Filedata');
// 判断目录是否存在
$dir=$request->input('files');
if (file_exists("./Uploads/{$dir}")) { }else{
mkdir("./Uploads/{$dir}");
}
// 判断上传的文件是否有效
if ($file->isValid()) {
// 获取后缀
$ext=$file->getClientOriginalExtension();
// 生成新的文件名
$newFile=time().rand().'.'.$ext;
// 移动到指定目录
$request->file('Filedata')->move('./Uploads/'.$dir,$newFile);
echo $newFile;
}
}
}
2、无刷新上传,上传好的图片如何显示?
插入一个img标签就好:将插入成功的img的url放进img标签中,然后将这个img标签插入到html中,浏览器没有这个img资源会自动请求的
// 拼接图片
imgs="<img width='200px' src='/Uploads/Goods/"+data+"'>";
// 展示图片
$("#main").html(imgs);
// 隐藏传递数据
$("#imgs").val(data);
3、图片无刷新上传之后,提交页面,图片路径如何传到服务器?
无刷新上传成功之后,将 图片的路径 给一个 隐藏input标签,让这个标签将数据传到服务器
4、ajax删除数据之后,刷新原页面数据的思路?
如果vue遍历输出数据(vue方便很多):这样返回的数据就带 列表数据
如果php遍历输出数据(还要改其它相关变量,比如总数据条数):可以用jquery直接删除元素
5、删除数据记录之后如何删除记录图片字段对应的图片?
查询图片的地址:$data=\DB::select("select * from pic where id=$id");
unlink方法删除图片:unlink("./Uploads/Goods/{$data[0]->img}");
public function destroy(Request $request){
// 获取删除ID $id=$request->input('id'); // 查巡图片
$data=\DB::select("select * from pic where id=$id"); // 删除操作
// 删除成功 返回值1
// 删除失败 返回值0 if (\DB::delete("delete from pic where id=$id")) {
# code... // 删除成功 删除图片
unlink("./Uploads/Goods/{$data[0]->img}");
return "1";
}else{
return "0";
} }
6、laravel的ajax如何批量删除数据?
传递id数组的字符串过去即可:而且就算是数组也可以转化成json字符串
无刷新批量删除(ajax) 1、JQ
// 批量删除方法 function delAll(){
// 获取被选中数据的值
var arr=[];
// 获取所有的数据 并且是被选中的
inputs=$(".inputs:checked");
// 获取选中数据的value值
for (var i = inputs.length - 1; i >= 0; i--) {
// 把值压入到数组
arr.push(inputs.eq(i).val());
};
// 把arr转换成字符串
str=arr.join(',');
// 发送ajax请求
$.post('/admin/pic/delAll',{'str':str,'_token':'{{csrf_token()}}'},function(data){
// 判断数据是否删除成功
if (data==arr.length) {
// 移除对应的数据
for (var i = arr.length - 1; i >= 0; i--) {
$("#tr"+arr[i]).remove();
};
// 修改数据个数
tot=Number($("#tot").html())-Number(data);
$("#tot").html(tot);
}else{
alert('删除失败');
}
}); } 2、控制器
public function delAll(Request $request){ $str=$request->input('str'); $data=\DB::select("select * from pic where id in($str)"); // 执行删除语句 if ($a=\DB::delete("delete from pic where id in($str)")) {
# code...
// 删除图片
foreach ($data as $value) {
unlink("./Uploads/Goods/{$value->img}");
}
return $a;
}else{
return 0;
}
}
7、ajax如何传数组数据到服务器?
json字符串
8、无刷新排序如何实现?
数据库:增加排序字段
html:显示排序字段的input框的onchange方法(onchange方法应该是失去焦点后才触发)
js:整体刷新排序还是用的reload方法:window.location.reload();
无刷新排序(ajax) 1、JQ // 无刷新排序 function change(obj,id){
// 获取ID // 获取用户修改的值 val=$(obj).val(); // 发送ajax请求 $.post('/admin/pic/sort',{'id':id,'val':val,'_token':'{{csrf_token()}}'},function(data){ // 判断师傅修改成功
if (data==1) {
// 页面自动刷新
window.location.reload();
}else{
alert('修改失败');
} });
} 2、控制器
public function sort(Request $request){
// 修改数据库 if (\DB::update("update pic set sort={$request->input('val')} where id={$request->input('id')}")) {
# code... echo "1";
}else{
echo 0;
}
}
9、js函数常用格式(带不带this)?
可以第一个参数都把本对象的this带上:比如 onchange="change(this,{{$val->id}})"
10、ajax的使用实例?
[百度搜索 提示关联词]
[加载更多]
[瀑布流]
二、内容在总结中
laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)的更多相关文章
- laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)
laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...
- laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)
laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...
- laravel基础课程---14、表单验证(lavarel如何进行表单验证)
laravel基础课程---14.表单验证(lavarel如何进行表单验证) 一.总结 一句话总结: lavarel的验证的功能比tp要[简单]且[强大]很多 直接控制器中:添加[规则数组]和[修改提 ...
- laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)
laravel基础课程---9.视图(lavarel的模板语法和tp相比怎样) 一.总结 一句话总结: lavarel的模板语法比thinkphp好用很多:和html代码配合的更好 lavarel比t ...
- laravel基础课程---15、分页及验证码(lavarel分页效果如何实现)
laravel基础课程---15.分页及验证码(lavarel分页效果如何实现) 一.总结 一句话总结: 数据库的paginate方法:$data=\DB::table("user" ...
- laravel基础课程---10、数据库基本操作(如何使用数据库)
laravel基础课程---10.数据库基本操作(如何使用数据库) 一.总结 一句话总结: 1.链接数据库:.env环境配置里面 2.执行数据库操作:DB::table('users')->up ...
- laravel基础课程---8、laravel响应和视图(响应是什么)
laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...
- laravel基础课程---16、数据迁移(数据库迁移是什么)
laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...
- laravel基础课程---7、文件处理、闪存、cookie(cookie原理和使用场景)
laravel基础课程---7.文件处理.闪存.cookie(cookie原理和使用场景) 一.总结 一句话总结: 页面请求服务器的时候是把这个页面中所有的cookie都带上了的,cookie里面也存 ...
随机推荐
- VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决的方法
VC6使用Visual AssistX版本号的问题,换一个版本号.如"Visual Assist X 10.8.2029"就可以解决. http://pan.baidu.com/w ...
- Leetcode 编程训练(转载)
Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...
- MySqlDataReader
本文讲述如何从SqlDataReader或MySqlDataReader中循环读取内容并输出 sqlserver和mysql的DataReader的用法完全一样,只是名字不同,以mysql为例 str ...
- Cocos2d-x 3.1.1 学习日志2--error:仅仅有静态常量整型数据成员才干够在类中初始化
今天遇到比較低端的一个问题,就是成员的初始化问题,编译器也无法验证,不同的编译器有些能过有些不能过,我也不知道为什么,总是我们以vs为准吧,以为我们用的环境就是它,话不多说.解决方式例如以下: ...
- CSU - 1556 Jerry's trouble(高速幂取模)
[题目链接]:click here [题目大意]:计算x1^m+x2^m+..xn^m(1<=x1<=n)( 1 <= n < 1 000 000, 1 <= m < ...
- Java 嵌套类和内部类演示样例<二>
嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...
- java eclipse使用不同jdk版本
因为开发需要,两个工程分别需要使用jdk1.6(elipse indigo)和jdk1.8(eclipse neon).因为两个eclipse对于jdk版本的要求不同,若只在环境变量中配置jdk版本, ...
- phpstudy nginx下curl请求本地其他项目
curl 请求的时候 如果用post请求,传递参数为 数组的时候 header 头 会被设置为 multipart/form-data 如果是字符串 形式 header 头会被设置为applica ...
- 微信小程序页面布局之弹性布局-Flex介绍
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新 ...
- TCP交换数据流——Nagle算法简单记录
Nagle算法: 该算法提出的目的是想解决网络中大量的小的TCP数据包造成网络拥塞的问题,举个例子,当客户端要发送一个字节的TCP数据包到服务器时,我们实际上产生了41字节长的分组:包括20字节的IP ...