关于Jquery使用ajax回调后,
1.是否可以使用回调数据data的问题
2.是否可以调用在ajax中新建的html标签的问题
此为个人开发中遇到的问题,特来总结。
问题1:Jquery是否可以调用在js中新建的html标签的问题
.在html中分页显示中,使用前端Jquery中的ajax添加分页的标签
jax({
type: "post",
url: "showUserByPage",
data: {
currPage: targetP,
userName: $("#userNameTip").val(),
},
success: function (data) {
var pageGuide=
"<ul id='links' class='pagination'>"+
"<li class='page-item'> <a id='firstP' class='page-link' href='javascript:void(0)'>首页</a> </li>"+
"<li class='page-item'> <a id='preP' class='page-link' href='javascript:void(0)'>上一页</a></li>"+
"<li class='page-item'> <a id='nextP' class='page-link' href='javascript:void(0)'>下一页</a></li>"+
"<li class='page-item'> <a id='lastP' class='page-link' href='javascript:void(0)'>尾页</a></li>"+
"</ul>";
$("#pageGuideSpan").prepend(pageGuide);
其中,pageGuide是html页面的一个标签
如果在ajax外调用下一页标签(在ajax中动态添加的标签)的操作,操作将无法执行。
$.ajax({
success:function(data){
...
...
},
error:function(){},
});
//使用下一页a标签
$("#nextP").click(function () {
alert("123");
showUsers(nextP);
});
但是直接在success回调函数中调用下一页标签,就可以成功
$.ajax({
success:function(data){
...
...
//直接在回调函数里使用 $("#nextP")
$("#nextP").click(function () {
alert("123");
showUsers(nextP);
});
},
error:function(){},
});
原因:
ajax回调数据,此时 id=‘nextP’ 的下一页标签数据还没回调,在ajax外使用下一页标签,无法将click事件绑定到该标签上。
如果在ajax内部的success回调函数内使用,就可在标签数据回调后绑定事件
如果想在ajax外部操作JS语句,可以在ajax内部使用onclick事件,在onclick里使用function函数nextPage(),因为此时在ajax回调时已经绑定了onclick事件:即调用nextPage函数
"<li class='page-item'> <a id='nextP' class='page-link' href='javascript:void(0)' οnclick='nextPage()'>下一页</a></li>"+
然后在ajax外面,定义nextPage函数
$.ajax({
success:function(data){
...
...
},
error:function(){},
});
function nextPage(){
$("#links").remove();
showUsers(nextP)
}
问题2:是否可以使用ajax回调数据的data的问题
$.ajax执行成功回调函数success的数据data,在函数外是不能直接使用的
var pageBean
$.ajax({
success:function(data){
pageBean=data;
...
...
},
error:function(){},
});
alert(pageBean.currPage)
定义的全局变量pageBean,在alert中无法调用
但是在事件中是可以调用的
var pageBean
$.ajax({
success:function(data){
pageBean=data;
...
...
},
error:function(){},
});
//注意:#addUserBtn标签是在html中定义好的,不是JS动态添加的。如果是在JS中动态添加则会失败,因为不在ajax内部绑定事件,此时数据还没有回调。
$("#addUserBtn").click(function(){
alert(pageBean.currPage)
})
个人理解:
事件还没触发,执行顺序在ajax之后,此时ajax已经回调了数据,所以可以调用。如果不在事件中,直接指向alert语句,此时数据还没回调,pageBean未初始化。
注意:
addUserBtn标签是在html中定义好的,不是JS动态添加的。
如果该标签是在JS中动态添加则会失败。因为不在ajax内部绑定事件,此时数据还没有回调(即回到了问题1)。