js在循环中调用方法

想做的是js动态获取数据库导航栏父栏目和子栏目,data是父栏目,data1是子栏目,现在遇到的问题是for循环中调用方法会先执行完for,然后再执行调用的方法,我试过用... 想做的是js动态获取数据库导航栏父栏目和子栏目,data是父栏目,data1是子栏目,现在遇到的问题是for循环中调用方法会先执行完for,然后再执行调用的方法,我试过用定时器的方法来实现,但是定时器在fcallback方法里不被实现,求大神给我一个解决方案 展开
 我来答
woshidaniel
2015-08-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

你这里的ajax是异步执行的,所以调用还没执行完成,for循环接着往下执行了。

把ajax改成同步的方式

$.ajax({
        async: false,//这里设置成同步
        type : "GET",
        url : 'tet.php',
        complete: function(msg){
            alert('complete');
        },
        success : function(data) {
            alert('success');
            temp=data;
        }
    });
久孙倾3
2013-10-29
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

你是想每for一次就执行scallback一次,完了再继续下一次吧?

$.get是异步的,当然会一下子就循环完了。

你需要使用同步,让这个AJAX没有收到结果之前不往下执行。

var param = {};//这里是参数
$.ajax({
  type : "get",
  url : "ClassAction",
  data : param, 
  async : false,
  success : scallback  
});
追问
大哥,同步方法我试过了,页面直接卡住,我把服务停了页面才缓过劲来,打开页面一看,满屏幕都是字,说明它一直在重复的调用同一个方法,原因在哪不知道
追答
那肯定是你循环太多了吧,每次1-2秒的话10个都够你受了,网速不快的话更是坑。
你最好一次性取得所有栏目信息然后再处理,而且栏目一般都是固定的吧,完全有可能在服务器端语言中生成出来,没必要在客户端一个个的Ajax啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5b22b89
2013-10-29
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
ajax的调用都是异步执行的,所以会出现你所说的问题。你可以在第一次访问后台的时候把所有的父栏目和子栏目的数据全部返回,而不要每次都查询一次后台,这样应该就没有问题了。
更多追问追答
追问
主要是我从后台查询的数据传到js还需要解析,把有用的数据分出来,没用的扔掉
追答
那就在后台封装好数据,只把有用的数据返回
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲁海123
2013-10-29
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
你这样的写法 就有问题
function a()
{
function b()
{
//这样嵌套就是错误的
}
}
你可以写成
function a()
{
b();
}
function b()
{}
追问
之前我是两个方法分开的,但是后来出了个小插曲,b方法不能调用,我就试着把b方法写到a方法里了,虽然后来找到是参数声明的问题,但是这样写也不妨碍使用,我也就懒得再复制粘贴回去了
追答

楼下的说得对

第二个循环 $.get 要设置成同步

这样的缺点就是 如果慢的话 页面会卡

要解决的话 你要么把数据一次取出来

而且 你这种 方法也不太科学

如果二级菜单多的话 要get多少次

还是一次取出来吧

比如

id.名字

  1. xxx1{6,xxx7,7.xxxxx}

  2. xxx3

  3. xxx3

这种格式的数据

或者用json吧

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式