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()调用的异步特性,您将获得第一个调试输出。他们发送请求并继续执行代码——他们不会阻止,也不会等待服务器的响应。这就是为什么在收到任何响应和执行成功回调中的代码之前,您的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);
// ...
}
});
我不确定您是否真的打算在收到第一个响应后才发送第二个请求,但如果是这样,那么您将不得不稍微重构代码,并从第一个请求的成功回调内部调用的函数发送第二次请求。
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- Jquery append oly获取循环Rails中的最后一个elemen
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 多维关联数组的最后一个索引
- JavaScript更新最后一个索引类数据
- 在分页中显示数据表的第一个和最后一个按钮
- 数据表:禁用第一个下一个上一个最后一个,并在处理时显示/搜索记录
- jQuery AJAX成功数据仅解析最后一个JSON节点的奇怪问题
- 替换数据属性中的最后一个破折号值
- 删除字符串中最后一个正斜杠之前的数据
- JavaScript中的Ajax只发送数组中的最后一个数据
- AngularJS只显示JSON数据中的最后一个元素
- 数据存储获取范围内的最后一个键
- 最后一个域没有足够的数据列"当结合烛台和折线图的谷歌图表
- 获得错误的数据值从最后一个li在ul
- 只有 my for 循环中的最后一个数据才会分配
- 为什么下面是fs.writeFile只从最后一个文件写入数据