<script type="text/javascript">
$(document).ready(function(){ 
  $(":button").click(function(){
      $.ajax({
            url:'urlxxxxxxxxxxxxx',
            success:function(data){
    //该方法是不是支持并发?即是否是闭包的?                
            }
        });
    });
});
</script><script type="text/javascript">
$(document).ready(function(){ 
  $(":button").click(function(){
      var dy_id = $(this).attr("id");//这个值是根据点击按钮获取值变动的
      $.ajax({
            url:'urlxxxxxxxxxxxxx',
//context:xxx 如果不使用context是否也一样可行
            success:function(data){
    $("#" + dy_id).val(date.value); //关键这个dy_id 是否不会存在以下说的问题?并发以及返回先后顺序
 
    //该方法是不是支持并发?即是否是闭包的?                
//那么 我在这了在根据返回结果在根据dy_id进行操作
//如果是并发的那么dy_id值已经改变了
//如:第一次调用时候 dy_id = 1;第二次调用时候时候dy_id = 2.
// 如果第二次先返回,第一次后返回,当第一次后返回时候它再根据dy_id操作的
//时候,这是dy_id的值是 1 还是 2 ? 这个是不是闭包的?还是怎么解释

// 如果不能直接获取上面的dy_id ? 那么怎么获取法?
// 是不是需要使用context:xxx,      设置为上下文.如果不使用context是否也一样可行
            }
        });
    });
});
</script>

解决方案 »

  1.   

    看贴的第一感觉是:不知道你想要什么。
    这个并发跟闭包哪里有一毛线的关系?“即”从何来?
    context参数是上下文,用处有限,看具体需求。
    怎么改变的?你的站点是动态的,给每个人的DOM树都不一样,那么每个人根据自己手里的副本发出参数各不相同的Request,所得内容自然是由参数决定的。
    如果同一人发出两个异步请求,那么哪个请求先回来是不确定的;但如果多用户各发出异步请求,这与服务器线程有关。
    无论你的AJAX的success如何改变DOM树,JS是单线程的,回调也是一个一个执行的。
    最后,闭包是什么再去找找,并发什么就算了。
      

  2.   

    异步的话 抓不到你想要的值 把jquery 的Ajax 改为同步方式试试
      

  3.   

    我说的有点问题。我说的并发是这个意思:总共2次点击不同的按钮都触发这个方法的ajax调用。先是第一次调用 dy_id=1,赶紧点击第二次dy_id=2,但是后台程序只针对第一次的点击睡眠1分钟,而第二次点击立即返回那么这样 第二次的结果要先于第一次返回那么回调中的success:function(data){
                这里是第二次先返回:那么 dy_id是等于几?是否第二次的是2 而第一次的是1
    }
      

  4.   


    是单线程的,

    但是连续点击很多次,其中某些点击的结果返回顺序打乱了
    第一次点击最后才返回等等
    那么dy_id的值已经变化了,等到第一次结果返回时候呢?还是1吗?
      

  5.   

    我们总是需要在每个ajax请求的回调事件里添加操作DOM文档等逻辑。对于单个或多个来源分别提交ajax请求,如果逻辑互不干扰,谁先谁后完成不重要;如果逻辑互相干扰,比如请求2需要以请求1的结果作为参数、请求1需要改写了DOM文档等,那么把请求2写入请求1的回调里即可。请求的来源更加不重要,请求包含head,get请求将信息写在url里,post请求将信息写在body里,服务器根本不关心是哪个button提出的请求,回调函数工作的时候DOM树是什么样子服务器更加不想知道。
      

  6.   

    你可以建一个环境试一下啊,向同一个页面发送请求,根椐不同的参数选择是否sleep,人为造成两次完成请求的时间差,返回结果会告诉你答案的
    我的看法是:
    dy_id都只是局部变量,它们的值在完成ajax请求前后不会变化,因为他们处在两个独立的运行环境中
      

  7.   

    看到楼上的回答才有点明白LZ的意思,楼主是觉得,不同的BUTTON都提交ajax请求,因为$(':button')看起来调用了同样的方法,内部都有dy_id 变量,不同的请求都要访问和修改dy_id,担心它的变化?dy_id 是在click()方法声明的,即为函数作为域,不同的button的click事件有自己版本的dy_id,不干扰的。
      

  8.   


    是的我的就是这个意思。前面的代码是这样写回调函数的:$.ajax({
              url:'urlxxxxxxxxxxxxx',
                success:function(data){
                 //xxxxxx
                根据dy_id 操作
              }
    });但是还有的写法是这样的:$.ajax({
              url:'urlxxxxxxxxxxxxx',
                success:callbackFn;
    });
    callbackFn(){
     ///
    那么这里怎么根据
    dy_id 操作?
    }那么callbackFn 而外定义的和原来定义是不是一样的效果?如果是而外定义的方法那么dy_id 怎么操作?
      

  9.   

    呵呵,完全是一样的效果,如果callbackFn写在click()里边那么就可以访问到变量dy_id,如果写在click之外当然就访问不到了,其他无异。