浅谈前后台交互

�前后台交互

举例:外卖餐厅订餐
初识状态:

<form method="get">
    <div>丽德快餐厅</div>
    <input type="button" name="button" id="btn" value="立即订餐">  
</form>

具体的菜单(菜品+价格),前台要从后台获取,这时就要前台想后台发送一个数据,jquery将Ajax封装。以GET方式向后台提交数据,链接后台的地址存在URL里面,async判断是否异步,一般都会选择true,异步,因为同步会出现卡顿现象,dataType,要求后台给我们返回的数据类型,success数据传送成功后生成的函数,函数里面的参数就是后台给我们返回的数据。
根据上图的流程,可以理解为,用户 通过脚本语言的 Ajax,向服务器传送HTTP请求,服务器将请求处理后返回一组数据到Ajax,经过一些列编码成HTML和CSS呈现给用户。毕竟所有的程序最终都要转化为HTML和CSS用户才能看到。

$.ajax({
        type: "get", //数据提交类型
        url: "form-2.php?action=num",
        data: {},
        dataType: "json",
        async: true,
        success: function(data){
            for(i in data) {    
                var div = document.createElement('div');
                document.body.appendChild(div);
                $("<span>"+data[i][0]+"</span> <span class='price'>"+data[i][1]+"</span> <input type='checkbox' name='key[]' value="+i+"/> 订餐份数:<input type='text' name='amount_"+i+"'/>").appendTo(div);
            }
        }
    });

前台通过GET传送的请求,后台也要用GET方法接受,接受后将前台的需求返回。

$menu = array();
    $menu[] = array("红烧肉",10);
    $menu[] = array("烤鸡", 20);
    $menu[] = array( "鲍鱼", 30);
    $menu[] = array( "青菜汤",4);
    //返回界面所需要的数据
    if(!empty($_GET["action"])) {
        $jsonstr = json_encode($menu);
        echo $jsonstr;
    }

这样前台的界面就会形成。


image.png

界面形成后,用户开始订餐


image.png

此时前台需要将用户选中的菜品和所选份数的数据传递给后台,后台将所选菜品对应的价格与份数相加,计算出总价,返回给前台,前台将接受到的数据呈现给用户
$("#btn")[0].onclick = function() {
        var arrIndex = [];
        var strIndex = '';
        var arrCount = [];
        var strCount = '';
        //遍历界面中的复选框,将勾选中的下标和对应的份数保存到数组里面
        $('input:checkbox').each(function(index,val) {
            if(val.checked == true) {
                arrIndex.push(index);
                arrCount.push($('input:text')[index].value)
            }
        //将数组变成字符串:=> 用字符串传递比较安全
            strIndex = arrIndex.join();
            strCount = arrCount.join();
        })
        $.ajax({
            type: "post", //数据提交类型
            url: "form-2.php",
            data: {"key":strIndex,"amount_":strCount},
            dataType: "json",
            async: true,
            success: function(data){
                $("<h4>您的总订单:</h4>").appendTo(document.body);
                for(var i =0;i<data.length-1;i++) {
                    $("<div></div>").html(data[i].name+" 份数:"+data[i].amount+" 小计:"+data[i].price).appendTo(document.body);
                }
                $("<span></span>").html("总价:").appendTo(document.body);
                $("<span></span>").html(data[2].total).appendTo(document.body);
            }
        });
    }

前台通过POST方法,将勾选框的下标 key 和对应的份数 amount_ 传送到后台,后台接受到数据之后进行处理,将小计与最后的总价返回给前端。

if(!empty($_POST["key"])){
        $totalPrice = 0;
        $userSelected = array();
        $keys = explode(',',$_POST['key']);
        $amount = explode(',',$_POST['amount_']);
        foreach($keys as $key => $val){
             $amount1 = $amount[$key];
             $userSelected[$key]['name'] = $menu[$val][0];
             $userSelected[$key]['price']= $menu[$val][1]*$amount1;
             $userSelected[$key]['amount'] = $amount[$key];
             $totalPrice += $userSelected[$key]['price'];
        }
        $userSelected[]['total'] = $totalPrice;
//       recordMenu($userSelected);
         echo json_encode($userSelected);
    }

结果如下(简易版网上订餐)


image.png

旁白:前端与服务器的交互。一个请求对应一个回应。

欢迎来到大瑞的微博

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,916评论 25 708
  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,256评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 原创诗/江南风景 92岁的老外婆已吃不下饭 她的子孙从全国各地赶回来 她的床前现着一双双模糊的眼睛 第二天 老外婆...
    江南风景打工者的正能量阅读 203评论 0 3
  • 八月至于我,是个蜕变的八月,发生的第一个变化是那个坚信写作靠才华而自己并没有的我,报名参加了“写作课”;第...
    果小编阅读 167评论 0 0