我试图将两个数组相乘。一个数组的值是$('#element').val();
,另一个是获取GET请求的结果。
控制台输出:
这是我的代码:
$("#sendeS1").click(function() {
var i = 1;
var Q_Values = [];
var G_Values = [];
var R_Values = [];
for (i; i <= 20; i++) {
$.get("bewertung/get/weight/" + i, function(weight) {
Q_Values[i - 1] = $('#startup_1').find('.' + i).val();
G_Values[i - 1] = weight;
R_Values[i - 1] = Q_Values[i - 1] * G_Values[i - 1];
console.log("Q:" + Q_Values);
console.log("G:" + G_Values);
console.log("R:" + R_Values);
});
$.ajax({
url: '/bewertung/1',
type: 'POST',
data: {
startup_id: '1',
user_id: localStorage.getItem("userid"),
question_id: i,
wert: G_Values[i - 1]
}
});
}
});
&#13;
答案 0 :(得分:1)
这样做:
对let
块中的变量i
使用for
,因此它是一个单独的变量,在循环完成后仍然可以引用它并且你只是那时从get
来电
使用+
将val()
转换为数字(虽然在您的情况下并非绝对必要,因为与动态转换相乘)
代码:
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
for(let i = 1; i <= 20; i++){
$.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
});
//...etc
警告:当for
循环完成时,数组还没有值,所以不要假设你在循环之后就拥有了所有数据。有关处理此问题的几种方法,请参阅How do I return the response from an asynchronous call?。
一种不是最好的代码,但最容易理解的方法是使用倒计时,所以你知道何时拥有所有数据,然后调用一个将进行进一步处理的函数:
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
var countDown = 20;
for(let i = 1; i <= 20; i++){
$.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
countDown--;
if (countDown == 0) processResults(Q_Values, G_Values, R_Values);
});
//...etc
但我真的建议调查Promises。这真的是要走的路。幸运的是,jQuery $.get
返回一个承诺,这些承诺可以传递给$.when
,当所有这些承诺都得到满足时,它将调用它的then
方法。 (另见What does $.when.apply($, someArray)
do?)。
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
var promises = [];
for(let i = 1; i <= 20; i++){
promises.push($.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
}));
//...etc
}
$.when.apply($, promises).then(function() {
// all is done, process the results here ...
});
这段代码可以进一步改进,以便每个承诺都能解析为自己的价值,而不是将产品推送到数组中,但这可以让你自己看作一个练习。