比如接口 /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 ,當然這時候是能找到的(頁面已經渲染結束了)這是我的理解,如有錯誤歡迎來噴!