jquery自定义函数包含$.post(),首次执行总是到post方法结束而其后代码不被执行,为何?
使用jquery自定义了个函数,内部有$.post()方法且有回调函数,$.post()方法后还有代码。可总是在第一次调用该函数时不能完全执行,大概是到post方法结束便...
使用jquery自定义了个函数,内部有$.post()方法且有回调函数,$.post()方法后还有代码。可总是在第一次调用该函数时不能完全执行,大概是到post方法结束便中断了,再次调用该方法,就正常了,不知道为什么...
function getProducts(pf){
$.post("bs_searchps.action",{searchParam:pf},function(products){
if(products!=null){
var str = "";
$.each(products,function(){
str += "<li class='prodItem'><span>";
................................
str += "</span></li>";
});
$("#main").data(pf,str);
notFind = false;
}else{
notFind = true;
}
});
}
//渲染商品信息显示区
function listProducts(pf){
if(!$("#main").data(pf)){
getProducts(pf);
}
if(!notFind){
$("#prodsList li").remove();
.............................. 展开
function getProducts(pf){
$.post("bs_searchps.action",{searchParam:pf},function(products){
if(products!=null){
var str = "";
$.each(products,function(){
str += "<li class='prodItem'><span>";
................................
str += "</span></li>";
});
$("#main").data(pf,str);
notFind = false;
}else{
notFind = true;
}
});
}
//渲染商品信息显示区
function listProducts(pf){
if(!$("#main").data(pf)){
getProducts(pf);
}
if(!notFind){
$("#prodsList li").remove();
.............................. 展开
展开全部
$.post()是异步执行的。了解一下异步执行,和同步的问题,我想你应该是想同的步。想把$.post()里的东西执行完后在执行后面的吧。
追问
贴上代码了。我是想这样走的,先取页面缓存数据,若没有再请求服务器并将数据缓存到页面,后续对取到的数据做进一步处理...
追答
jamxval已经说出了解决方案,按他的做就可以了。
if(!notFind){ } 以及后面的代码都写到新函数中,或写到你post的回调中,或不用把新函数当参数传入,直接在回调中调用新函数。祝你解决难题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
onelovecat 说到了重点。
把 if(!notFind){ } 里面需要做的事情写成一个函数(比如 function notFoundHandler(){$("#prodsList li").remove();} )
,把这个函数作为参数传递给 getProducts(pf,notFoundHandler);
然后直接在 notFind = true; 的地方调用这个函数。notFoundHandler.apply(它需要的参数...).
这就叫Callback,让 getProducts 里面的 ajax onSuccess handler 来调用你的函数 (所以叫回调,本来你调用它的,后来它回来调用你的)。像 JavaScript 很多异步的调用都必须使用回调才能做到,你不能指望估计时间差来认定它会按顺序执行。
把 if(!notFind){ } 里面需要做的事情写成一个函数(比如 function notFoundHandler(){$("#prodsList li").remove();} )
,把这个函数作为参数传递给 getProducts(pf,notFoundHandler);
然后直接在 notFind = true; 的地方调用这个函数。notFoundHandler.apply(它需要的参数...).
这就叫Callback,让 getProducts 里面的 ajax onSuccess handler 来调用你的函数 (所以叫回调,本来你调用它的,后来它回来调用你的)。像 JavaScript 很多异步的调用都必须使用回调才能做到,你不能指望估计时间差来认定它会按顺序执行。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
贴代码,让他们瞧瞧
很明显,是同步异步的问题,使用$.ajax,并且设置async为false
很明显,是同步异步的问题,使用$.ajax,并且设置async为false
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码 贴上看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询