Ajax只返回字符串化数组的第一个索引到Spring控制器

时间:2018-04-13 12:34:13

标签: javascript json ajax spring-mvc stringify

这是整个JS代码:

function getPoolsData(){
$.getJSON('../json/data.json', function(data) {

var date_from = new Date();
console.log(date_from);
var pools_hashrates = [{"date_from" : date_from}];

data.pools.forEach(function(pool){

var api_url = pool.api;
var poolName = pool.name;

if(pool.type == "forknote"){

    $.getJSON(api_url + 'stats', function(data) {

            var poolHashrate = data.pool.hashrate;

            pools_hashrates.push({"poolName" : poolName, "hashrate" : poolHashrate});

            console.log("Pool name: " + poolName + " Pool hashrate: " + parseInt(poolHashrate));
    });
}
else{
    $.getJSON(api_url + 'pool/stats', function(data) {

            var poolHashrate = data.pool_statistics.hashRate;

            console.log("Pool name: " + poolName + " Pool hashrate: " + parseInt(poolHashrate));

            pools_hashrates.push({"poolName" : poolName, "hashrate" : poolHashrate});

    });
}

});

console.log(pools_hashrates);

$.ajax({
  type: "POST",
  contentType : 'application/json; charset=utf-8',
  dataType : 'json',
  url: "/save",
  data: JSON.stringify(pools_hashrates),
  success :function(result) {
      console.log("Success!");
 }
});

});
}

这是控制器方法:

@RequestMapping("/save")
public @ResponseBody String getPoolsData(@RequestBody String string){

    System.out.println("Triggered: " + string);
    return "Success mvc";
}

控制器输出:

Triggered: [{"date_from":"2018-04-13T11:05:00.652Z"}]

问题是,只有数组的第一个索引被发送到控制器,而数组的长度大约是20。 console.log(pools_hashrates)打印整个数组。该脚本通过按钮调用。

1 个答案:

答案 0 :(得分:1)

Ajax调用是异步的,这意味着它会立即触发所有3个调用,调用getPoolsData不会等待get完成,你需要将ajax调用设置为async

喜欢这个

✔ checkBox1

请注意,这会将所有ajax调用设置为异步,更好的做法是重写您的调用

$.ajaxSetup({
    async: false
});

仅使这些调用异步

或者你可以使用setInterval来检查jQuery.active == 0

$.ajax({
    url: "...",
    type: "GET",
    data: ...,
    async: false
});

如果是这样的话

jQuery.active == 0 // this tells you if you have active ajax calls