闲话ajax,例ajax轮询,ajax上传文件

  引语:ajax这门技术早已见怪不怪了,我本人也只是就自己真实的经验去总结一些不足道的话。供不是特别了解的朋友参考参考!

  本来早就想写一篇关于ajax的文章的,但是前段时间一直很忙,就搁置了,趁着元旦放假,赶紧补上吧!

  ajax的出现,可以出给用户带来了很好的体验,证据如下:

    1、感觉:以前要给用户呈现新的内容,就必须要刷新当前页面,结果往往是这样:用户看着看着,唰...,然后又重头看起,我那个去,这谁受得了; 自从有了ajax后,就是这样的,用户关注哪一块,变化哪一块,我们就更新那一块,完全看不出差别。

    2、时间:如果有的内容要显示出现将会是非常耗时的,如统计数据一类,按照以前,都是等待所有数据都准备完全了,半天之后,终于可以一起显示了; 自从有了ajax之后,这点耗时的东西就交给他吧,把主要的类型快速显示出来,用户完全没感觉啊!

    3、隐性错误:如果服务器发生了一些500错误,在以前,那整个网页就绝对不行了; 有了ajax后,如果仅是ajax部分错误,对其他地方将完全无影响,但是你最好尽快修复好错误!

  ajax的意义大概就在于这些吧,具体的应用场景根据情况而定,应用好ajax技术,给用户一个更好的体验!

  下面是本文分享的两个点,ajax轮询,ajax上传文件(因为这两个看起来稍微有点意义):

    1、ajax轮询

      ajax作为异步和服务器交互,作轮询,不停接收服务器内容是个不错的选择,用于做一些简单的消息通知,定时刷新局部信息都有着不错的功效!

    2、ajax上传文件,这里,主要用到两个插件,jquery.validate.js, jquery.form.js, 用到表单验证只是为了正常场景下一些操作以及自己不设置提交项,jquery.form.js则是一个可异步的表单提交插件,主要使用方法为 ajaxSubmit. 代码如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax---轮询--上传文件举例</title>
    <script src=‘./js/jquery-1.11.2.min.js‘></script>
    <script src=‘./js/tools.js‘></script>
    <script>
        $(function(){
            var msgContainer = ‘#msg-container‘;
            var setStop = 0;
            $("#btn").on("click", {btn: $("#btn")}, function(ev){
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "poll.php",                //设置请求地址
                    timeout: 80000,                 //ajax请求超时时间80秒
                    data: {time: "20"},             //20秒后无论结果服务器都返回数据
                    success: function(data, textStatus){
                        //从服务器得到数据,显示数据并继续查询
                        if(data.success == "1"){
                            $(msgContainer).html($(msgContainer).val() + "\r\n[有数据]" + data.text);
                        }
                        //未从服务器得到数据,继续查询
                        if(data.success == "0"){
                            $(msgContainer).html($(msgContainer).val() + "\r\n[无数据]");
                        }
                    },
                    //Ajax请求超时,继续查询
                    error: function(XMLHttpRequest,textStatus,errorThrown){
                        if(textStatus == "timeout"){
                            $(msgContainer).html($(msgContainer).val() + "\r\n[超时]");
                        }
                    },
                    complete: function(XMLHttpRequest, textStatus){
                        if($(msgContainer).html().length > 100){
                            $(msgContainer).html(‘清空‘);
                        }
                        if(!setStop){
                            ev.data.btn.click();
                        }
                    }
                });
            });
            $(‘#stop-query‘).on(‘click‘, function(){
                setStop = 1;
            });

            //表单验证
            $(‘#Form1‘).validate({
                errorClass : ‘color-red‘,   //设置错误的class
                rules : { //规则
                    cate_name : {required:true},
                    sort : { digits:true }
                },
                messages : {//提示内容
                    cate_name : {required:‘&nbsp;&nbsp;*分类名必填‘},
                    sort : {digits:"&nbsp;&nbsp;排序必须是正整数"}
                },
                submitHandler : function(form){submitForm(form);}
            });
        });

        //表单ajax提交, fn为提交成功后要执行的回调函数,没有则刷新当前页面
        function submitForm(form, fn){
            $(form).ajaxSubmit({
                success : function(response, statusText){
                    if(response.status==1){
                        var info = response.info ? response.info : ‘提交成功...‘;
                        alert(info);
                        setTimeout(function(){
                            if(typeof(fn) === ‘function‘){fn(response);}else{window.location.reload(true);}
                        },1);
                    }else{
                        console.log(‘提交失败‘)
                    }
                },
                beforeSubmit : function (formData, jqForm, options) {
                    console.log(‘数据提交中...‘);
                },
                complete: function(data){
                    console.log(data);
                }
            });
        }
    </script>
    <style>
        html,body{margin: 0; height: 100%;}
        .wrap{width: 50%; margin: 0 auto;background: #048E6A; height: 100%;text-align: center; position: relative;}
        .container{padding: 20px; line-height: 40px;}
        .container.with-back{background: #46ff50;}
        .ext-container ul{width: 100%; margin: 0; padding: 0;}
        ul li{list-style-type: none;}
        .ext-container ul li{background: #F38A66; padding: 3px;}
        .ext-container ul li:hover{background: #3E9054;}
        .ext-container ul.list li a{text-decoration: none; color: #ffffff;display: block;}
    </style>
</head>
<body>
<div class="wrap">
    <div class="ext-container">
        <ul class="list">
            <li><a href="javascript:;">ajax上传文件</a></li>
        </ul>
    </div>
    <div class="container">
        <input id="btn" type="button" value="点击轮询测试开始" />
        <input type="button" id="stop-query" value="点击停止" />
        <div id="msg">
            <textarea name="msg" id="msg-container" cols="30" rows="10"></textarea>
        </div>
    </div>
    <div class="container with-back">
        <div>上传文件--测试</div>
        <form action="tmp.php" id="Form1" method="post" enctype="multipart/form-data" >
            <div>
                <input type="file" name="fileTest" id="file-test" />
                <input type="submit" value="上传了" id="submit-form" />
            </div>
        </form>
    </div>
</div>

</body>
</html>        

  后台代码示例,poll.php,轮询:

<?phpif(empty($_POST[‘time‘]))exit();
        set_time_limit(0);//无限请求超时时间
        $i=0;
        while (true){
            usleep(500000);//0.5秒
            $i++;

            //若得到数据则马上返回数据给客服端,并结束本次请求
            $rand=rand(1,999);
            if($rand <= 300){
                $arr=array(‘success‘=>"1",‘name‘=>‘xiaocai‘,‘text‘=>$rand);
                echo json_encode($arr);
                exit();
            }

            //服务器($_POST[‘time‘]*0.5)秒后告诉客服端无数据
            if($i == $_POST[‘time‘]){
                $arr=array(
                    ‘success‘ => "0",
                    ‘name‘ => ‘hi‘,
                    ‘text‘ => $rand
                );
                echo json_encode($arr);
                exit();
            }
        }

  后台代码示例2,tmp.php,上传文件:

<?php
  var_dump($_FILES);            //仅打印出结果测试即可

  借助于这些插件,开发是如此的简单!

  注:当用第三方插件时,也最好是自己处理ajax请求,因为这样你会更方便地处理各种响应,而不是ajax就仅仅是一个ajax,因为这样的体验也是完全不够的!(听说extjs挺好的,有机会也可以去用用)

  要做就要做到最好!(tools.js 是jquery.validate.js, jquery.form.js的一起压缩的文件,有需要的请@me 索取)

时间: 2024-10-13 11:43:29

闲话ajax,例ajax轮询,ajax上传文件的相关文章

ajax+ashx 完美实现input file上传文件

1.input file 样式不能满足需求 <input type="file" value="浏览" /> IE8效果图:    Firefox效果图: Chrome效果图:   2.input file上传按钮美化 css: .file{ position: relative; background-color: #b32b1b; border: 1px solid #ddd; width: 68px; height: 25px; display:

flask使用原生ajax、不使用表单(Form)上传文件

〇.知识点 jquery ajax 文档告诉你可以使用默认的 application/x-www-form-urlencoded, multipart/form-data, or text/plain 这三种,其它的也可以,但是需要告诉ajax 的怎样序列化它.--这句话来源于:https://www.cnblogs.com/htoooth/p/7242217.html 一.原生ajax.不使用表单(Form) app.py import os from flask import Flask,

通过Ajax使用FormData对象无刷新上传文件

var oMyForm = new FormData(); oMyForm.append("username", "Groucho"); oMyForm.append("accountnum", 123456); oMyForm.append("file", $('#file')[0].files[0]); $.ajax({ url: '/Manage/UploadImg', type: 'POST', cache: fals

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

关于ajax分段上传文件实例~

本来打算写的勤快一点的,谁知道最近好忙啊,忙着应聘的事情,这里突然想提一下自己的历程 自己现在是一只大三狗,高中三年是玩过去了,上了一所省内普通的不能再普通的二本.不过在大学里还算的上勤奋,大一上在学生会搅搅水,大一下就开始在学校网络中心里面干活,网络维护是工作,编程是兴趣,基本上每天网络中心寝室两点一线,所以说还算得上勤奋.不过现在我自己算是明白,很多事情不是勤奋就好了的,方法不对,真的是事倍功半.自己之前学习东西都是瞎倒腾,看书,看视频,记笔记,写demo.看起来稀疏平常,但是自己缺点在于太

使用ajax上传文件

有时候我们需要在web端向服务器上传文件,以前是使用form的方式进行提交,html5中支持直接使用xmlhttprequest上传文件,send对象支持blob对象而文件就是一个blob对象 ajax上传文件 ajax中可以通过参数processData这个参数来控制data是否进行转换,我们将这个参数设置为false就可以使用ajax进行文件的上传操作了 example: $.ajax({ url: "your url", type: "POST", proce

jQuery Ajax上传文件

function UploadFileExcel() { var file = $("#file_upload")[0].files[0]; var form = new FormData(); form.append("file", file); form.append("uid", uid); form.append("token", token); $.ajax({ url: eshopUrl + "/inde

对Ajax连接的认识~为毛不能上传文件!!!

最近做毕设的时候需要用到上传图片的功能,但是我的毕设全部的传输都是基于ajax的请求,百度了一圈发现TMD居然说ajax不能上传文件!!当时我就不乐意了啊,那难道其他人都用的是黑科技吗?!又来网上的大牛告诉说用jquery的一个插件就可以完成,百度了一下原来叫--ajaxfileupload.js 这又是个什么鬼!(╯‵□′)╯︵┴─┴为毛要用插件,来来来~ajax咋俩聊聊,你为毛不能上传文件来着? 对于ajax是如何实现的我想大家都很清楚了,首先得到XmlHttpRequest对象实例的一个引

使用Ajax.BeginForm 中需要 上传文件 但 Request.files获取不到

使用Mvc里的插件jquery.unobtrusive-ajax.min.js 之前一直困在这里,一开始以为添加属性enctype="multipart/form-data"就可以 网上看到都是用另外一个插件jquery.form.js 于是,从某篇文章的附件中下载了jquery.form.js,弄了许久,还不行,顿时泪崩了, 最后在官网下载最新的jquery.form.js就解决了  ==|| 使用Ajax.BeginForm 中需要 上传文件 但 Request.files获取不到