0

我想用 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

4

1 回答 1

0

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

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

当收到 2 个响应时,将执行成功回调(2 次,每个响应一次),但是此时您的局部变量 send2.nama 的值为“2”。这就是为什么你得到输出“step 2 print 2”两次,而不是“step 2 print 1”和“step 2 print 2”。

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

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

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

于 2013-07-12T17:55:45.053 回答