Parallel Ajax Calls in Javascript/jQuery

前端 未结 9 2124
甜味超标
甜味超标 2021-02-07 17:26

I am completely new to Javascript/jquery world and need some help. Right now, I am writing one html page where I have to make 5 different Ajax calls to get the data to plot grap

相关标签:
9条回答
  • 2021-02-07 18:08

    You can't do that using async: false - the code executes synchronously, as you already know (i.e. an operation won't start until the previous one has finished).
    You will want to set async: true (or just omit it - by default it's true). Then define a callback function for each AJAX call. Inside each callback, add the received data to an array. Then, check whether all the data has been loaded (arrayOfJsonObjects.length == 5). If it has, call a function to do whatever you want with the data.

    0 讨论(0)
  • 2021-02-07 18:09

    Using jQuery.when (deferreds):

    $.when( $.ajax("/req1"), $.ajax("/req2"), $.ajax("/req3") ).then(function(resp1, resp2, resp3){ 
        // plot graph using data from resp1, resp2 & resp3 
    });
    

    callback function only called when all 3 ajax calls are completed.

    0 讨论(0)
  • 2021-02-07 18:09

    The following worked for me - I had multiple ajax calls with the need to pass a serialised object:

        var args1 = {
            "table": "users",
            "order": " ORDER BY id DESC ",
            "local_domain":""
        }
        var args2 = {
            "table": "parts",
            "order": " ORDER BY date DESC ",
            "local_domain":""
        }
    
        $.when(
            $.ajax({
                    url: args1.local_domain + '/my/restful',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    },
                    type: "POST",
                    dataType : "json",
                    contentType: "application/json; charset=utf-8",
                    data : JSON.stringify(args1),
                    error: function(err1) {
                        alert('(Call 1)An error just happened...' + JSON.stringify(err1));
                    }
                }),
            $.ajax({
                url: args2.local_domain + '/my/restful',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                type: "POST",
                dataType : "json",
                contentType: "application/json; charset=utf-8",
                data : JSON.stringify(args2),
                error: function(err2) {
                    calert('(Call 2)An error just happened...' + JSON.stringify(err2));
                }
            })                     
    
        ).then(function( data1, data2 ) {
            data1 = cleanDataString(data1);
            data2 = cleanDataString(data2);
    
            data1.forEach(function(e){
                console.log("ids" + e.id)
            });
            data2.forEach(function(e){
                console.log("dates" + e.date)
            });
    
        })
    
        function cleanDataString(data){
                data = decodeURIComponent(data);
                // next if statement was only used because I got additional object on the back of my JSON object
                // parsed it out while serialised and then added back closing 2 brackets
                if(data !== undefined && data.toString().includes('}],success,')){ 
                    temp = data.toString().split('}],success,');
                    data = temp[0] + '}]';
                }
                data = JSON.parse(data);
                return data;                    // return parsed object
          }
    
    0 讨论(0)
提交回复
热议问题