繁体   English   中英

JavaScript中的Ajax仅发送数组中的最后一个数据

[英]Ajax in JavaScript sends only the last data in array

我想使用JavaScript中的json ajax从应用程序发送数据。 我有一个以上的数据包,但是当我通过ajax发送数据时,它仅发送最后一个数据包。

例如,我发送两个数据包,然后ajax发送两个数据包,但是它们都包含相同的数据(最后一个数据包)。

这是我的代码。

    for(var i=0;i<data.length;) {
            /*var d = new Date();
            d.setTime(data[i].updated);*/
var send2 = {};
    send2.nama= data[i].name;
    send2.rumahsakit = data[i].hospital;

    //step 1
    alert("step 1"+send2.nama);


var client = "coba";
var Idku = data[i].unik;
//clientID
var request2 = {};
request2.jsonrpc = "2.0";
request2.id = "load_reg"+Idku+"";
request2.method = "registrasi:loadByClientUnik";
request2.params = [client,Idku];
//request2.params = akun.value;

var postData = JSON.stringify(request2);

var postArray  = {json:postData};   


$.ajax({
    type: 'POST',
    url: 'service.php',
    data: postArray,
    dataType:'json',
    //async: false,
    success: function(result){      
    alert(send2.nama);
    //alert step 2; 

    if(result.result == -1){
    //alert("-1 cuk");
    var requestx = {};
    requestx.jsonrpc = "2.0";
    requestx.id = "store_reg";
    requestx.method = "registrasi:store";
    requestx.params = [send];

    var postDatax = JSON.stringify(requestx);

    var postArrayx  = {json:postDatax};

    $.ajax({
    type: 'POST',
    url: '/service.php',
    data: postArrayx,
    dataType:'json',
    //async: false,
    success: function(result){
    //alert("sukses");
    },
    error: function(e){
    console.log(e);
    alert(e);
    }       });

    }else{
    alert(send2.nama);
    var request = {};
    request.jsonrpc = "2.0";
    request.id = "store_reg";
    request.method = "registrasi:storeById";
    request.params = [result.result,send2];

    var postData2 = JSON.stringify(request);

    var postArray2  = {json:postData2};

    $.ajax({
    type: 'POST',
    url: '/service.php',
    data: postArray2,
    dataType:'json',
    //async: false,
    success: function(result){
    //send2 = "";
    //alert("sukses ID");
    },
    error: function(e){
    console.log(e);
    alert(e);
    }
    });

    }
    },
    error: function(e){
        console.log(e);
        alert(e);
    }

}); 
//return false;
i++;
}
getData();
}

行为示例:我发送了2个数据包,第一个数据包的名称= 1,第二个数据包的名称= 2,然后我同时发送了两个数据包:

输出:

  • 警报步骤1打印1

  • 警报步骤1打印2

  • 警报步骤2打印2

  • 警报步骤2打印2

我想要这个输出:

  • 警报步骤1打印1

  • 警报步骤2列印1

  • 警报步骤1打印2

  • 警报步骤2打印2

      }else{ alert(send2.nama); var request = {}; request.jsonrpc = "2.0"; request.id = "store_reg"; request.method = "registrasi:storeById"; request.params = [result.result,send2]; var postData2 = JSON.stringify(request); var postArray2 = {json:postData2}; $.ajax({ type: 'POST', url: 'http://10.126.14.116/portable_med_services/service.php', data: postArray2, dataType:'json', //context set context: { send2: send2 }, //async: false, success: function(result){ //send2 = ""; //alert("sukses ID"); }, error: function(e){ console.log(e); alert(e); } }); 

这是我更新的代码,添加了上下文...对吗?

更新:

我已经在此问题之后解决此问题。 循环问题内的jQuery ajax

您的代码实际上按顺序发送了两个请求(步骤1),就像您可能想要的那样。

由于$ .ajax()调用的异步特性,您将获得第一个调试输出。 他们发送请求并继续执行代码-他们不会阻塞,也不会等待服务器的响应。 这就是为什么您的external / main for循环一直执行到结束(在您的情况下为2次),直到接收到任何响应并执行成功回调中的代码。

当收到2个响应时,将执行成功回调(2次,每个响应一次),但是在那时,您的本地变量send2.nama的值为“ 2”。 这就是为什么两次获得输出“步骤2打印2”而不是“步骤2打印1”和“步骤2打印2”的原因。

这也可能是您从成功回调内部发出的其他请求的错误原因,因为您在回调内部使用了局部变量。 您应该改用context参数:

$.ajax({
  // ...
  context: { send2: send2 },
  success: function (result) {
    // "this" has the value of the context object
    alert(this.send2.nama);
    // ...
  }
});

我不确定您的意图是否真的是仅已经收到第一个响应之后才发送第二个请求,但是如果是,那么您将不得不重构代码并从内部调用的函数中发送第二个请求第一个请求的成功回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM