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

Ajax in JavaScript sends only the last data in array

本文关键字:最后一个 数据 数组 中的 Ajax JavaScript      更新时间:2023-09-26

我想用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()调用的异步特性,您将获得第一个调试输出。他们发送请求并继续执行代码——他们不会阻止,也不会等待服务器的响应。这就是为什么在收到任何响应和执行成功回调中的代码之前,您的outer/main-for循环一直执行到最后(在您的情况下是2次)。

当收到2个响应时,将执行成功回调(2次,每个响应一次),但此时本地变量send2.nama的值为"2"。这就是为什么您会得到两次输出"步骤2打印2",而不是"步骤2打印机1"answers"步骤2扫描仪2"。

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

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

我不确定您是否真的打算在收到第一个响应后才发送第二个请求,但如果是这样,那么您将不得不稍微重构代码,并从第一个请求的成功回调内部调用的函数发送第二次请求。