zoukankan      html  css  js  c++  java
  • JQuery Ajax实例

    JQuery Ajax Loading image实例

    一直以来对ajax只是存在于听说过这个名词的阶段,没有实际用过。由于项目的需要,使得有机会实际使用它。通过初次使用,让我对ajax的敬畏少了许多。

    维基百科对ajax有如下的说明:

    AJAXAsynchronous JavaScript and XML(异步的JavaScriptXML技术),指的是一套综合了多项技术的浏览器网页开发技术。Ajax的概念由 Jesse JamesGarrett 所提出[1]传统的Web应用允许用户端填写表单(form),当提交表单时就向Web服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多与此不同,AJAX应用可以仅向服务器发送并取回必须的数据,它使用SOAP或其它一些基于XML的页面服务接口(接口),并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少(大约只有原来的5%)。结果,我们感觉服务器回应更快了。同时,很多的处理工作可以在发出请求的客户端机器上完成,因此Web服务器的负荷也减少了。类似于DHTMLLAMPAJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX派生/合成式(derivative/composite)的技术正在出现,如AFLAX

    原始的ajax开发是很复杂的,并且对于不同的浏览器需要进行相应的编码,而JQuery ajax这种对ajax的有效封装,将ajax开发变得简单,下面通过项目中的实例来简单介绍JQuery ajax的使用。

    前端html(edit_card.jade):

    ...
    div.image#loading
        img(src="#{card.img}").imagesize
        button#startAjaxRequest(type='button').primary.right Preview
    …

    前端html采用jade模版引擎

    前端JS(edit_card.js)

    $("#startAjaxRequest").click(function () {
          $('#loading').showLoading({
              'addClass': 'loading-indicator-bars',
              'afterShow':
              function() {
                   var data = {};
                  data.card_title = $('#card_title').val();
                  data.card_body = $('#card_body').val();
                  data.card_from = $('#card_from').val();
         
                  $.ajax({
                      type:'POST',
                       data: data,
                      timeout:5000,
                      url:'/dynamic-merge',
                      success:function(data,textStatus){
                          $('#loadingimg').attr('src','/images/cards/'+data);
                      },
                       complete:function(XMLHttpRequest,textStatus){
                          $('#loading').hideLoading();
                      },
                      error:function(XMLHttpRequest,textStatus,err){
                           alert(err);
                      }
                  });
               }
           });
    });

    使用jquery plugin “showLoading” 作为jquery ajax loading的动画特效。

    本实例使用jquery ajax的基础ajax方法,而没有使用更高封装的post方法。

    具体参数settings详见http://api.jquery.com/jQuery.ajax/

    后端node.js(app.js)

    …
    var dynamic_merge =require('./routes/dynamic_merge');
    app.all('/dynamic-merge',dynamic_merge.dynamic_merge);
    …

     

    后端node.js(dynamic_merge.js)

    exports.dynamic_merge = function(req,res){
       
        var mxiao = require('./mxiao');
        var image_name = req.session.image_name;
        var asset_id = req.session.asset_id;
        var xml_name = image_name+'_text';
    //    console.log(req.param('card_body'));
    //    var card = JSON.parse(req.data);
        var card_title = req.param('card_title');
        var card_body = req.param('card_body');
        var card_from = req.param('card_from');
        console.log(card_title);
       
        mxiao.gen_textxml(card_title,card_body,card_from,image_name);
       
        var pabloDebug_url = 'D:/Pablo/PabloServer/binaries/Win32/Debug/';
        var pabloRelease_url = 'D:/Pablo/PabloServer/binaries/Win32/Release/';
       
        var xml = pabloDebug_url+'xml/'+xml_name;
        var psd = pabloDebug_url+'psd/'+asset_id;
        var output = pabloDebug_url+'public/images/cards';
       
        var exec = require('child_process').exec;
       
        var child = exec(pabloRelease_url+'PabloTest.exe '+xml+' '+psd+' '+output, function(error,stdout,stderr){
            if(error!=null){
                console.log(stderr);
            }else{
                console.log(stdout);
                console.log('merge successful!');
            }
       
        });
       
        child.on('close',function(code){
            res.send(image_name+'_text.jpg');
        });
       
    };
     

    Ajaxtype参数设置为post,需要传输的数据被封装成一个表单,所以在后端可以用类似var card_title = req.param('card_title');的方法来得到前端数据。当后端处理完,通过在close事件中利用res.send(image_name+'_text.jpg');来返回给前端生成的图片名称。

  • 相关阅读:
    浙江省新一代多普勒天气雷达系统
    删除目录下的所有文件及子文件夹
    在南京14所测试出厂雷达(转)
    c++实现aes加密算法,对字符串进行加密
    自已在别人基础上封装的AES数法 C++
    IOS发布问题
    GameCenter 使用指南
    [iOS]AES加密在iOS上面的实现
    【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012625日更新iap恢复详解】
    基于cocos2dx引擎的游戏框架设计
  • 原文地址:https://www.cnblogs.com/williamxiao/p/3499963.html
Copyright © 2011-2022 走看看