2017-04-09 61 views
0

我有3個Ajax調用。從每個AJAX調用數據被傳遞到john_doe();多個ajax調用單個函數javascript

呼叫1

$.ajax({ 
     url: url1, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data1){ 

    john_doe(data1); 
}); 

來電2

$.ajax({ 
     url: url2, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data2){ 

    john_doe(data2); 
}); 

呼叫3

$.ajax({ 
     url: url3, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data3){ 

    john_doe(data3); 
}); 

主要功能

function john_doe(param){ 
console.log(param); //Print data from all three ajax call. 
} 

如何分離在john_doe即功能數據1,數據2和數據3?因爲我需要進行算術運算。

目前,

輸入

data1 = one,two,three 
data2 = four 
data3 = five 

輸出

的console.log(PARAM)將使輸出作爲

one 
four 
five 

我想輸出

console.log(param[0]) 
console.log(param[1]) 
console.log(param[2]) 

param[0] containing one,two,three 
param[1] containing four 
param[2] containing five 

我沒有對數據的控制。如何分別訪問data1,data2和data3?

+0

你所說的 「獨立」 的意思是? – Sorikairo

+0

更改您的john_doe函數以採用另一個參數來標識fisrt參數? – Sorikairo

+0

@Sorikairo現在單個console.log(param)打印來自data1,data2和data 3的數據。所以我得到了value1,value2和value3。而value1來自data1,value2來自data2等等。 –

回答

1

快速而骯髒的解決方案是簡單地傳遞一個標識符,這是爲什麼骯髒的,因爲它不是針對真正可擴展的,加上每次說的第四或第五個叫你做到這一點,你需要添加更多的標識符,你的if語句在main方法中最終會變得非常難看。但是有時候說「保持簡單」是可以的。

主要功能:

function john_doe(identifier, param) { 

    // best to use something more readable then numbers 
    if(identifier == 1) {  
     console.log(param); //Print data from all ajax call 1. 
    } else if(identifier == 2) { 
     console.log(param); //Print data from all ajax call 2. 
    } else if(identifier == 23) { 
     console.log(param); //Print data from all ajax call 3. 
    } else { 
     // handle bad id 
    } 
} 

在你的Ajax調用,通過在正確的標識,例如召喚2

$.ajax({ 
     url: url2, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data2){ 

    // numeric 2 in in the first param is your identifier 
    john_doe(2,data2); }); 
0

添加一個參數去讓你知道它正在從

呼叫1

$.ajax({ 
     url: url1, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data){ 

    john_doe('call1',data); 
}); 

召喚2

$.ajax({ 
     url: url2, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data){ 

    john_doe('call2',data); 
}); 

電話叫3

$.ajax({ 
     url: url3, 
     dataType: "JSON", 
     type: "GET", 
     }).success(function(data){ 

    john_doe('call3',data); 
}); 

主要功能

function john_doe(call,data){ 
    console.log('Called from : ' + call); 
    console.log(data); //Print data from all three ajax call. 
} 
0

這個怎麼樣? 聲明一個對象容器來保存你的響應數據值和你的算術運算函數。

var myParams = { 
    all_params: [], 
    getParams: function(){ 
     return this.all_params; 
    }, 
    setParam: function(index, data){ 
     this.all_params[index] = data; 
    }, 
    yourArithmeticOperation: function(){ 
     console.log(this.all_params); // your actual logic using all 3 ajax response data 
    } 
} 

然後,在你的AJAX調用:

// call 1 
$.ajax({ 
    url: url1, 
    dataType: "JSON", 
    type: "GET", 
}).success(function(data){ 
    myParams.setParam(0, data); // add ajax 1 response data 
}); 

// call 2 
$.ajax({ 
    url: url1, 
    dataType: "JSON", 
    type: "GET", 
}).success(function(data){ 
    myParams.setParam(1, data); // add ajax 2 response data 
}); 

// call 3 
$.ajax({ 
    url: url1, 
    dataType: "JSON", 
    type: "GET", 
}).success(function(data){ 
    myParams.setParam(2, data); // add ajax 3 response data 
}); 

在您需要的所有響應數據的情況下,

// after all three ajax calls 
params = myParams.getParams(); 
console.log(params); 

最後,你的算術運算,

myParams.yourArithmeticOperation(); 
5

使用承諾您可以訪問所有Promise.all()回調中的數據,並且一次處理所有需要的數據。假設使用jQuery 3+。可以使用$.when在舊版本

var urls =['data-1.json','data-2.json','data-3.json']; 
    // array of ajax promises 
    var reqPromises = urls.map(function(url){ 
    return $.ajax({ 
     url: url, 
     dataType: "JSON", 
     type: "GET" 
    }); 
    }); 

    Promise.all(reqPromises).then(function(res){ 
    // res is array of all the objects sent to each `$.ajax` from server 
    // in same order that urls are in 
    var param = res.map(function(item){ 
     return item.val 
    }); 

    console.log(param) 
    }) 

DEMO

-2

嘗試加入async: false你的AJAX調用

$.ajax({ 
     url: url1, 
     dataType: "JSON", 
     type: "GET", 
     async: false, 
     }).success(function(data){ 

    john_doe('call1',data); 
}); 
+0

永遠不會使用'async:false'。它一直是一個糟糕的做法,現在已被瀏覽器廠商棄用,並會在控制檯中發出警告 – charlietfl