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();
..............................
展开
 我来答
onelovecat
2013-06-21 · TA获得超过174个赞
知道小有建树答主
回答量:160
采纳率:100%
帮助的人:77万
展开全部
$.post()是异步执行的。了解一下异步执行,和同步的问题,我想你应该是想同的步。想把$.post()里的东西执行完后在执行后面的吧。
追问
贴上代码了。我是想这样走的,先取页面缓存数据,若没有再请求服务器并将数据缓存到页面,后续对取到的数据做进一步处理...
追答
jamxval已经说出了解决方案,按他的做就可以了。
if(!notFind){ } 以及后面的代码都写到新函数中,或写到你post的回调中,或不用把新函数当参数传入,直接在回调中调用新函数。祝你解决难题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jamxval
2013-06-21 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1387万
展开全部
onelovecat 说到了重点。

把 if(!notFind){ } 里面需要做的事情写成一个函数(比如 function notFoundHandler(){$("#prodsList li").remove();} )
,把这个函数作为参数传递给 getProducts(pf,notFoundHandler);

然后直接在 notFind = true; 的地方调用这个函数。notFoundHandler.apply(它需要的参数...).

这就叫Callback,让 getProducts 里面的 ajax onSuccess handler 来调用你的函数 (所以叫回调,本来你调用它的,后来它回来调用你的)。像 JavaScript 很多异步的调用都必须使用回调才能做到,你不能指望估计时间差来认定它会按顺序执行。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苏州欧进地坪厂
2013-06-21 · TA获得超过478个赞
知道小有建树答主
回答量:854
采纳率:80%
帮助的人:262万
展开全部
贴代码,让他们瞧瞧

很明显,是同步异步的问题,使用$.ajax,并且设置async为false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友091845d
2013-06-21 · TA获得超过745个赞
知道小有建树答主
回答量:466
采纳率:50%
帮助的人:332万
展开全部
代码 贴上看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式