form插件的应用及跨域异步上传文件,阿娘再也不用怀想自个儿用jq拼接DOM拼接的一团糟了

发送指令与分析数据

先说理解

form插件的应用及跨域异步上传文件,阿娘再也不用怀想自个儿用jq拼接DOM拼接的一团糟了。写在眼下

说来也很巧,
上午再做一个页面,再普通不过的分页列表,作者也许像在此以前一样,基于MVC环境下,我健康用PagedList.MVC
AJAX做无刷新分页,那时候难点就来了,列表数据中有个轮播图用到了slides.js插件,轮播图也使用了分页,数据第3页轮播图页码能健康使用,数据列表翻到第一页则轮播图的页码就无法日常使用,实际上PagedList.MVC自带的体裁文件已经和slides.j自带的体裁文件争辩,笔者还专程修改了slides.js的样式文件,然并无卵用,让郁闷飞壹会。。。

先说理解

  

  Cordova插件 : 

  安装:cordova plugin add cordovarduino

  代码示例:

  

var opts = {
        baudRate: 115200
    };
    $scope.allData = [];
    serial.requestPermission(function success(res){
        console.log(res);
        serial.open(opts, function success(res){
            console.log(res);
        }, function error(err){
            console.log(err);
        });
    }, function error(err){
        console.log(err);
    });
    var view = [];
    serial.registerReadCallback(function success(res) {
                var lin = new Uint8Array(res);
                view = view.concat(Array.from(lin));//因为插件把一次数据分多次返回所以先进行拼接
                if (view.length == 35) {
                    //单卡
                    $scope.anaData(view);
                    console.log('单' + view)
                }else{
                        //多卡
                    if ((view.length-35)%20 == 0) {
                        console.log('多' + view)
                        $scope.anaDatas(view);
                    }
                }
            },function error(error) {
                console.log(error)
    }); 
    //发送指令
    $scope.sendOrder = function(){
        serial.writeHex(myOrderString, function success(res){
            console.log(res);
        }, function error(err){
            console.log(err);
        });
    }
    //接收数据
    //解析数据单个
     $scope.anaData = function(aaa){
        var bbb = aaa.slice(13,29);
        var ccc = '';
        var arr = [];
        var ddd = [];
        function topow(x) {
            return x.toString(16)
        };
        bbb.map(topow);
        ccc = String.fromCharCode.apply(null,bbb);
        for (var i = 0;i<ccc.length;i=i+2) {
            arr.push(ccc.substring(i,i+2));
        }
        arr.reverse();
        ddd = arr.join('')
        console.log(ddd);
        $scope.allData.push(ddd);
        $scope.$apply();
     };

本条跨域异步上传作用大家借助了Jquery.form插件,它在异步表单方面很有效益,而跨域我们会在HTTP响应头上加多access-control-allow-method,当然这些头标志唯有IE十,火狐和谷歌(Google)上支撑,对于IE10之下的浏览器来说,我们就不能够用那种方法了,大家须要换个思路去干这事,让服务端去重写向大家的客户端,由客户端(与公事上传页面在同域下)来回到相关数据就可以。

壹、基于MVC PagedList.MVC的分页写法

var currentPage = 1;        $(function () {            //工具栏绑定页码            currentPage = $('.pagination li.active').text();            currentPage = $('.pagination li.active').text();            $.on('click', '.pagination li:not(".active")', function  {                var txtnum = $.text();                if (parseInt > 0) {                    DoSearch;                } else if (txtnum == '»') {                    DoSearch(parseInt(currentPage) + 1);                } else if (txtnum == '«') {                    DoSearch(parseInt(currentPage) - 1);                } else if (txtnum == '««') {                    DoSearch;                } else if (txtnum == '»»') {                    var pagenum = $.find.attr.replace(/[^\d]+/gi, '');                    DoSearch;                }                return false;            });        });//列表复合查询条件 function DoSearch {         var item = {};         if  {            item.pageIndex = page;          }          PostData;        }//重点就是这个方法,用于AJAX分页效果,主要是利用页面携带的数据来循环替换function PostData {         $.post('/Home/Index?rdm=' + Math.random(), objdata, function  {               //1、替换页面内列表数据                $(".contentajax").html.find(".contentajax").html;               //2、替换页码                $(".ajaxpage").html.find(".ajaxpage").html;                currentPage = $('.pagination li.active', $.text();        }); }

  

本条跨域异步上传功用我们赖以了Jquery.form插件,它在异步表单方面很有功力,而跨域大家会在HTTP响应头上加多access-control-allow-method,当然那些头标志唯有IE十,火狐和谷歌(Google)上支撑,对于IE10之下的浏览器来说,我们就无法用那种办法了,大家要求换个思路去干那事,让服务端去重写向我们的客户端,由客户端(与公事上传页面在同域下)来回到相关数据就能够。

   注意:

    不晓得插件的难题要么硬件的主题素材,本来应该一遍回到的数据报文分了累累回来,所以在监测回调接收数据的时候先把收到的数量拼接之后再举行下一步处理。假如你的设施健康能够去除这一步。

  

 

再做事

二、郁闷时在园子里观看壹位朋友发的jq分页插件

再做事

1 Jquery.form的使用

3、效果图

澳门葡京 1

澳门葡京 2

1 Jquery.form的使用

<form method="post" action="http://127.0.0.1:801/Home/UploadResult" enctype="multipart/form-data" id="form1">
<input name="qdctvfile" id="qdctvfile11" type="file" onchange="eventStart()">
</form>
<script type="text/javascript">
$("#form1").ajaxForm({
beforeSerialize: function () {
var filepath = $("#qdctvfile11").val()
var extStart = filepath.lastIndexOf(".");
var ext = filepath.substring(extStart, filepath.length).toUpperCase();
if (ext != ".PNG" && ext != ".JPG") {
alert("图片仅支持png,jpg格式");
$("#qdctvfile11").val("");
return false;
}
},
success: function (data) {
alert(data);
}
});
function eventStart(obj) {
$("#form1").submit();
}

四、 理论再华丽依旧要用coding来施行并发现js模版插件

自个儿依照那位朋友文章中写到的用法以及查看API写了个demo,发现先后尚未报错正是从未数据,他涉嫌remote参数中富含三个事件:beforeSend、success、complete,注释中写到在success中处理后台再次回到的数量,也正是个json串,json串中务必包蕴数据总的数量(total或count)。
小编在demo中看到那四个事件不起来效能,不驾驭那位伙计自个儿推行了从未,于是本身查看插件源码,发现源码中只有二个callback事件,在此间处理回来的数据,OK,消除了数据再次来到难题。

上面难题又来了,由于是分页,还算是比较健康的急需,那么此时小编就意识,常常的做法必将是直接在callback中foreach,各样拼接字符串、单引号、双引号。
作者拼着拼着友好就拼不下去了,作者跟着看这几个插件的DEMO,该插件的pageIndex是从0开首,很多插件都以从1上马,所以基于linq的分页1般都这么写:((pageIndex-一)*pageSize),那倘诺是0的话就绝不减了。
在API的花花世界三个定义吸引了本身的眼珠子:何以表现重返的数目,介绍一款jq模版插件,只需定义突显模版,1行js消除数据表现。其实js模版倒不是何等面生,只是从前没去用过,觉的拼凑jq就很牛气了,没悟出这一个模版这么大的魔力。
而且一定水准上这几个模版的怀想就像Angularjs的多少操作格局同样。

纠结了那半天本身又再一次把DEMO写了贰次,化解。
DEMO虽轻易,可是带给本身的拿走却异常的大,
笔者会重构我们的连串,并且拓宽前台尝试这种方法。

<form method="post" action="http://127.0.0.1:801/Home/UploadResult" enctype="multipart/form-data" id="form1">
 <input name="qdctvfile" id="qdctvfile11" type="file" onchange="eventStart()">
</form>
<script type="text/javascript">
 $("#form1").ajaxForm({
  beforeSerialize: function () {
   var filepath = $("#qdctvfile11").val()
   var extStart = filepath.lastIndexOf(".");
   var ext = filepath.substring(extStart, filepath.length).toUpperCase();
   if (ext != ".PNG" && ext != ".JPG") {
    alert("图片仅支持png,jpg格式");
    $("#qdctvfile11").val("");
    return false;
   }
  },
  success: function (data) {
   alert(data);
  }
 });
 function eventStart(obj) {
  $("#form1").submit();
 }

在意,代码中的eventStart方法是指在增选文件后,自动提交表单,而ajaxForm表示提交表单为11分形式,success回调方法是指
异步重返表单地址 的再次回到值。

伍、关键地点处理代码

 1 @{ 2     ViewBag.Title = "Index"; 3     Layout = "~/Views/Shared/_Layout.cshtml"; 4 } 5 <style> 6     h2 7     { 8         margin-left:80px; 9     }10 </style>11 <link href="~/Content/bootstrap.css" rel="stylesheet" />12 <link href="~/Content/jquery.pagination.css" rel="stylesheet" />13 <h2>jq Pagination and js Template</h2>14 <div class="container">15     <table id="rsTable" class="table table-striped">16         <thead>17             <tr>18                 <th>ID</th>19                 <th>Name</th>20                 <th>Price</th>21             </tr>22         </thead>23         <tbody id="rsbody">24 25         </tbody>26 27     </table>28     <div id="pager" class="m-pagination"></div>29 </div>30 31 <script src="~/Scripts/jsrender.min.js"></script>32 <script src="~/Scripts/jquery.pagination-1.2.1.js"></script>33 <script type="text/javascript">34     $(function () {35 36         $("#pager").page({37             remote: {38                 url: '/Home/AjaxList', //请求地址39                 param: {},             //请求参数40                 callback: function  {41                     //回调函数,处理返回值42                     var modelList = data.modelList;43                     $("#rsbody").empty().html($("#trTmpl").render(modelList));44                 },45                 pageIndexName: 'pageIndex',46                 pageSizeName: 'pageSize',47                 totalName: 'total'48             },49             pageSize: 350         });51     });52 </script>53 <script type="text/x-jsrender" id="trTmpl">54     <tr>55        <td>{{:ID}}</td>56        <td>{{:Name}}</td>57        <td>{{:Price}}</td>58     </tr>59 </script>

 public ActionResult Index()        {            return View();        }        public JsonResult AjaxList()        {            int pageIndex = Convert.ToInt16(Request["pageIndex"]);            int pageSize = Convert.ToInt16(Request["pageSize"]);            IList<Product> list = new List<Product>()            {                new Product{ID=1,Name="iphone6 plus",Price=6999},                new Product{ID=2,Name="iphone6",Price=4999},                new Product{ID=3,Name="MX5",Price=1799},                new Product{ID=4,Name="MEILAN NOTE",Price=799},                new Product{ID=5,Name="XIAOMI 2S",Price=1299}            };            IList<Product> modelList = list.Skip(pageIndex * pageSize).Take.ToList();            int count = list.Count;            var strJson = new JsonResult();            strJson.Data = new            {                modelList=modelList,                total=count            };            strJson.JsonRequestBehavior = JsonRequestBehavior.AllowGet;            return strJson;        }

小心,代码中的eventStart方法是指在采取文件后,自动提交表单,而ajaxForm表示提交表单为那几个格局,success回调方法是指异步重返表单地址的重返值。

二 跨域的发端达成

总结

即使是做了个分页的demo,不过在运用那些分页插件的经过中,却发现了js模版插件这几个好东西,写法简洁而且页面jq也简单不少。
从前还写过一片基于MVC Angularjs分页。多多相比较,根据自个儿须求运用。

下载链接: 访问密码 4d30

二 跨域的上马完成

消除域访问,大家能够在服务端的响应头上增加Access-Control-Allow-Origin和Access-Control-Allow-Methods五个特征就能够,那么些特点在IE10之下的浏览器不被帮助,分外郁闷。

化解域访问,大家能够在服务端的响应头上加多Access-Control-Allow-Origin和Access-Control-Allow-Methods五个性情就能够,那个特点在IE拾之下的浏览器不被支持,异常困扰。

/// <summary>
/// MVC模式下跨域访问
/// </summary>
public class MvcCorsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Access-Control-Allow-Origin", "*");
headers.Add("Access-Control-Allow-Methods", "*");
foreach (var item in headers.Keys)
{
filterContext.RequestContext.HttpContext.Response.Headers.Add(item, headers[item]);
}
base.OnActionExecuting(filterContext);
}
}
 /// <summary>
 /// MVC模式下跨域访问
 /// </summary>
 public class MvcCorsAttribute : ActionFilterAttribute
 {
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
   Dictionary<string, string> headers = new Dictionary<string, string>();

   headers.Add("Access-Control-Allow-Origin", "*");
   headers.Add("Access-Control-Allow-Methods", "*");
   foreach (var item in headers.Keys)
   {
    filterContext.RequestContext.HttpContext.Response.Headers.Add(item, headers[item]);
   }

   base.OnActionExecuting(filterContext);
  }
 }

瞩目,在生养条件下,我们的 Access-Control-Allow-Origin
应该是点名合法的域名的,*意味着对为此网站都绽放访问,那是险象迭生的。

留神,在生育环境下,大家的Access-Control-Allow-Origin应该是钦定合法的域名的,*表示对因而网址都开放访问,那是一触即发的。

三 消除IE拾以下无法跨域的标题

三 消除IE10以下不可能跨域的标题

对于IE浏览器确实没办法说了,固然很欣赏微软的事物,但对于IE来说,作者只得是NO,小编真不想过多的去谈论它,先看看IE完毕跨域上传的消除理念:由客户端不直接回到数据,而是重写向到客户端的callback地址,由
callback 像 ajaxForm 方法再次回到最终的数目,那

对于IE浏览器确实无法说了,即便很欣赏微软的东西,但对此IE来说,作者只得是NO,作者真不想过多的去谈论它,先看看IE完结跨域上传的缓解观念:由客户端不直接重返数据,而是重写向到客户端的callback地址,由callback像ajaxForm方法再次回到最后的数据,这样就化解了向来的跨域难题了。

样就化解了直接的跨域难题了。

  /// <summary>
  /// 第三方的服务端
  /// </summary>
  /// <param name="name"></param>
  /// <returns></returns>
  [HttpPost]
  public ActionResult UploadResult()
  {
   string data = "{'code':'OK','thumpImgUrl':'http://127.0.0.1/images/1.jpg'}";
   return Redirect("http://localhost:9497/Home/UploadCallback?data=" + data);
  }

  /// <summary>
  /// 可能是服务端来调用它
  /// </summary>
  /// <returns></returns>
  public ActionResult UploadCallback(string data)
  {
   return Content(data);
  }
/// <summary>
/// 第三方的服务端
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[HttpPost]
public ActionResult UploadResult()
{
string data = "{'code':'OK','thumpImgUrl':'http://127.0.0.1/images/1.jpg'}";
return Redirect("http://localhost:9497/Home/UploadCallback?data=" + data);
}
/// <summary>
/// 可能是服务端来调用它
/// </summary>
/// <returns></returns>
public ActionResult UploadCallback(string data)
{
return Content(data);
}

有点时候,大家在想三个标题标缓解办法时,假诺一条路走不通过,能够沟通思路,大概会有不测的得到!

稍稍时候,大家在想2个标题标缓解格局时,假诺一条路走不经过,能够交流思路,或然会有意外的获得!

有人问,那块使用POST格局在服务端与客户端举办数量传递能够不可能,小叔说:不得以,因为POST在付给到客户端后,客户端处理,然后照旧把结果回到给服务端,最后服务端再把结果回到给ajaxform,那如故又回来了始于的跨域难点,哈哈!

有人问,那块使用POST情势在服务端与客户端进行多少传递能够不得以,大伯说:不得以,因为POST在付出到客户端后,客户端处理,然后照旧把结果回到给服务端,最终服务端再把结果再次来到给ajaxform,那要么又回来了早先的跨域难点,哈哈!

澳门葡京 3

澳门葡京 4

澳门葡京 5

以上所述是小编给大家介绍的依照jQuery.form插件实现jQuery跨域异步上传文件的有关内容,希望对咱们持有援助!

呵呵,怎样,挺有意思的吧!

你只怕感兴趣的稿子:

  • 澳门葡京 ,jQuery插件ajaxFileUpload异步上传文件
  • 据书上说Jquery插件完结跨域异步上传文件效率
  • PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
  • jQuery异步上传文件插件ajaxFileUpload详细介绍
  • JQuery插件ajaxfileupload.js异步上传文件实例
  • jQuery插件ajaxFileUpload达成异步上传文件效果
  • jquery之ajaxfileupload异步上传插件(附工程代码)
  • Jquery插件之多图片异步上传
  • 动用jQuery异步上传文件的插件用法详解

更加多精粹内容,请点击《jQuery上传操作汇总》,实行深切学习和研讨。

上述就是本文的全体内容,希望对我们的读书抱有帮衬,多谢各位的读书!

您只怕感兴趣的篇章:

  • jQuery插件ajaxFileUpload异步上传文件
  • jQuery.form插件的选拔及跨域异步上传文件
  • PHP结合jQuery插件ajaxFileUpload完毕异步上传文件实例
  • jQuery异步上传文件插件ajaxFileUpload详细介绍
  • JQuery插件ajaxfileupload.js异步上传文件实例
  • jQuery插件ajaxFileUpload达成异步上传文件效果
  • jquery之ajaxfileupload异步上传插件(附工程代码)
  • Jquery插件之多图片异步上传
  • 动用jQuery异步上传文件的插件用法详解

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website