zoukankan      html  css  js  c++  java
  • ajax 处理请求回来的数据

    比如接口 /test, 请求方式get, 请求过来的数据要处理在container 里,如下代码

    $.get("/test", {}, function(result){
              $(".container").html('');
              if(result.length>0) {
                for(var i =0; i <result.length; i++) {
                  $(".container").append(
                    "<a >"+
                      "<li>" +
                        "<span  style='background-image:url(/sys-img/default.jpg)'></span>"+
                        "<p > <span ></span>"+ "张全蛋" +"</p>"+
                        "<p '>"+
                          "<span >" + "2017-9-11 12:05:30" + "</span>"+
                        "</p>"+
                      "</li></a>"
                  )
                }
              } else {
                $(".container").append(
                    "<h4 class='text-gray'>result里没有数据哦</h4>"
                )
              }
            });

    ps: 里面js 拼接的字符串可以用一个变量保存起来,然后统一追加到container 里面。在container里面可以做一个预处理,在里面可以放一个loading的图片,表示加载中。如 

     

    var templateStr = ''<span>........</span>'';
    $(".container").append(templateStr)

    这个时候,如果要给js拼接的字符串要绑定事件又该怎么处理呢? 要将事件绑定放在成功的回掉函数里,如下代码,

    $.get("/test", {}, function(result){
              $(".container").html('');
              if(result.length>0) {
                for(var i =0; i <result.length; i++) {
                  $(".container").append(
                    "<a class="a-link">"+
                      "<li>" +
                        "<span  style='background-image:url(/sys-img/default.jpg)'></span>"+
                        "<p > <span ></span>"+ "张全蛋" +"</p>"+
                        "<p '>"+
                          "<span >" + "2017-9-11 12:05:30" + "</span>"+
                        "</p>"+
                      "</li></a>"
                  )
                }
                //放在回调成功后的函数做触发事件
                $(".a-link").click(function(e){
                    var _thisid = $(this).id;
                    $.post("/test/one", {"www":xxx},     function(result){
                       ....
                    })
                  })
    
              } else {
                $(".container").append(
                    "<h4 class='text-gray'>result里没有数据哦</h4>"
                )
              }
            });                    

    之前我做了这样的处理

    $.get("/test", {}, function(result){
              $(".container").html('');
              if(result.length>0) {
                for(var i =0; i <result.length; i++) {
                  $(".container").append(
                    "<a class='link'>"+
                      "<li>" +
                        "<span  style='background-image:url(/sys-img/default.jpg)'></span>"+
                        "<p > <span ></span>"+ "张全蛋" +"</p>"+
                        "<p '>"+
                          "<span >" + "2017-9-11 12:05:30" + "</span>"+
                        "</p>"+
                      "</li></a>"
                  )
                }
                
    
              } else {
                $(".container").append(
                    "<h4 class='text-gray'>result里没有数据哦</h4>"
                )
              }
     });
    
    $(".link").click(function(e){
        e.preventDefault();
        e.stopPropagation();
        var _thisid = $(this).id;
        $.post("/msg/detail/view?msgid=" + _thisid, {}, function(result){
    
       })
    })

     把绑定事件的函数放在ajax后面,无法触发点击事件。

    有些同学会有疑惑,如果把绑定事件的函数放在请求ajax函数的后面,明明看到页面上已经加载好了相关的dom ,为什么就触发不了该dom的绑定事件呢?这里有两个知识点,第一个是ajax是异步加载, 程序执行到$(".link").click(function(e){....}) 会优先找 $('.link'),然后放在内存里,第二个是每次点击的时候就会去这块内存里去找这个 dom ,在ajax的请求的时候,还没有生成 $(''l.link),jq已经存下 $('.link') 的内存,并且是空的,因此,不论ajax有没有请求完毕,这里的 $('.link') 都是为空的,因此没办法绑定过事件。

    除了这种在ajax 的回掉函数里,添加事件,也可以,在外面用jq 的代理来触发点击事件;

    $('body').on('click','.selector', function(){...........})

    这里可行的原因也是上面的分析,程序加载的时候,已经将$('body')存在内存里,这是有的,当触发的时候,就会找 .selector ,当然这时候是能找到的(页面已经渲染结束了)这是我的理解,如有错误欢迎来喷!

  • 相关阅读:
    使用SSH搭建简易的网上购物系统
    myeclipse8.0中安装maven插件m2eclipse
    Ant入门
    hibernate中多对多分解成一对多,
    在eclipse上,安装myeclipse插件
    hibernate复合主键的映射
    struts2中struts:iterator标签的使用
    hibernate复合主键同时做外键
    Mahout问题总括
    面向对象基础概念
  • 原文地址:https://www.cnblogs.com/adouwt/p/7503885.html
Copyright © 2011-2022 走看看