for循环里sendrequest,假如循环了1-5,但是sendrequest之后获取到的也是五次,但是都是1-5中的5,也就是最后一个值。为什么呢?for (var ids=0; ids<6; ids++){alert(ids);sendRequest("GET", "/rest/oam/project/"+m+"/status", paramsp, function(response) {。。

alert(ids);

}
}也就是说alert(ids)出来的东西不一样,虽然都在for循环里,但是sendrequest里的都是alert出来的5javascriptsendrequest函数

解决方案 »

  1.   

    本帖最后由 showbo 于 2013-07-25 09:24:12 编辑
      

  2.   

    AJAX请求是异步的
    在回调的时候已经循环完了
      

  3.   


    版主,你好
    像我这种格式应该在哪里加idx呢,并且这里是用callback还是我的function(response)呢,还麻烦楼主指教了。我的m是for循环过来的,但是就是这个m总是拿到最后的值(我的sendrequest所有都包在一个()里)
    sendRequest("GET", "/rest/oam/project/"+m+"/status", paramsp, function(response) {
    if (response.status != null) {
        statusList[i] = {
           caseId: m,
           caseName: projNa
         };
      alert(m);
       i++;
    }
    });
      

  4.   


    版主,你好
    像我这种格式应该在哪里加idx呢,并且这里是用callback还是我的function(response)呢,还麻烦楼主指教了。我的m是for循环过来的,但是就是这个m总是拿到最后的值(我的sendrequest所有都包在一个()里)
    sendRequest("GET", "/rest/oam/project/"+m+"/status", paramsp, function(response) {
    if (response.status != null) {
        statusList[i] = {
           caseId: m,
           caseName: projNa
         };
      alert(m);
       i++;
    }
    });不好意思版主我写错了,这块我知道怎么加,是function sendRequest(method,url,paramsp,callback,ids){
           //....其他处理
           //调用回调函数
           callback(ajaxResponse,ids);
        }
    这一块我直接复制这个代码吗?还是哪里对应起来呵呵
      

  5.   

    请看描红的地方,需要修改的
       function sendRequest(method,url,paramsp,callback,ids){
           //....其他处理
           //调用回调函数
           callback(ajaxResponse,ids);
        }    for (var ids = 0; ids < 6; ids++) {        alert(ids);        sendRequest("GET", "/rest/oam/project/" + m + "/status", paramsp, function (response, ids) {//。。
                //
                alert(ids);
                //。
            }, ids);
        } 
      

  6.   

    版主,还是不行,我已经改成这样了,还是不对,提示m没有定义
    sendRequest("GET", "/rest/oam/project/"+m+"/status", paramsp, function(response,m) {
    if (response.status != null) {
    statusList[i] = {
    caseId: m,
    caseName: projNa
                    };
      alert(m);
      i++;
            }
    }, m);
      

  7.   

    sendRequest你改了回调的调用方式了没有,sendRequest也要增加一个参数
      

  8.   


    版主你的意思是改
     function sendRequest(method,url,paramsp,callback,ids){
           //....其他处理
           //调用回调函数
           callback(ajaxResponse,ids);
        }
    这个东西吧。
    可是我们项目里很多地方都用到sendRequest,并且大都不需要ids,那怎么办?只能重新声明一个function?
      

  9.   

    给sendRequest增加ids参数不会与什么副作用,因为加到最后,所以之前的代码没传递ids也不会出错。。修改执行callback(ajaxResponse,ids);回调就看你具体代码了,如果之前的都是一个参数,值传递ajax对象,那么增加ids没什么影响,但是如果是多参数的,这个就不好搞了。。,只能在当前页面重新定义sendRequest方法
    如果你怕混乱,最好还是在当前页面重新定义sendRequest方法覆盖原来的