Spaces:
Sleeping
Sleeping
Update nutri_call.html
Browse files- nutri_call.html +71 -37
nutri_call.html
CHANGED
@@ -325,74 +325,108 @@
|
|
325 |
|
326 |
|
327 |
<script>
|
328 |
-
// Константы содержания элементов в удобрениях (массовые доли)
|
329 |
-
const NUTRIENT_CONTENT_IN_FERTILIZERS = {
|
330 |
-
"CaN2O6": {"NO3": 0.11863, "Ca": 0.16972},
|
331 |
-
"KNO3": {"NO3": 0.136, "K": 0.382},
|
332 |
-
"K2SO4": {"K": 0.44874, "S": 0.18401},
|
333 |
-
"NH4NO3": {"NO3": 0.17499, "NH4": 0.17499},
|
334 |
-
"MgSO4": {"Mg": 0.09861, "S": 0.13010},
|
335 |
-
"KH2PO4": {"P": 0.218, "K": 0.275}
|
336 |
-
};
|
337 |
-
|
338 |
-
// Функция для пересчета процентов в константы
|
339 |
document.getElementById('calculate-btn').addEventListener('click', function() {
|
340 |
-
// 1. Собираем данные
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
const data = {
|
342 |
fertilizerConstants: {
|
343 |
"CaN2O6": {
|
344 |
-
"NO3":
|
345 |
-
"Ca":
|
346 |
},
|
347 |
"KNO3": {
|
348 |
-
"NO3":
|
349 |
-
"K":
|
350 |
},
|
351 |
"NH4NO3": {
|
352 |
-
"NH4":
|
353 |
-
"NO3":
|
354 |
},
|
355 |
"MgSO4": {
|
356 |
-
"Mg":
|
357 |
-
"S":
|
358 |
},
|
359 |
"KH2PO4": {
|
360 |
-
"P":
|
361 |
-
"K":
|
362 |
},
|
363 |
"K2SO4": {
|
364 |
-
"K":
|
365 |
-
"S":
|
366 |
}
|
367 |
},
|
368 |
profileSettings: {
|
369 |
-
"N":
|
370 |
-
"P":
|
371 |
-
"K":
|
372 |
-
"Ca":
|
373 |
-
"Mg":
|
374 |
-
"S":
|
375 |
-
"NH4":
|
376 |
-
"NO3":
|
377 |
-
"liters": document.getElementById('liters-input').value || 1
|
378 |
}
|
379 |
};
|
380 |
|
381 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
382 |
var xhr = new XMLHttpRequest();
|
383 |
-
xhr.open("POST", "/calculation", true);
|
384 |
xhr.setRequestHeader("Content-Type", "application/json");
|
385 |
|
386 |
xhr.onreadystatechange = function() {
|
387 |
if (xhr.readyState === 4) {
|
|
|
388 |
if (xhr.status === 200) {
|
389 |
-
console.log("
|
390 |
} else {
|
391 |
-
console.error("
|
|
|
392 |
}
|
393 |
}
|
394 |
};
|
395 |
|
|
|
|
|
|
|
|
|
396 |
xhr.send(JSON.stringify(data));
|
397 |
});
|
398 |
</script>
|
|
|
325 |
|
326 |
|
327 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
document.getElementById('calculate-btn').addEventListener('click', function() {
|
329 |
+
// 1. Собираем данные с проверкой каждого поля
|
330 |
+
const getValue = (id) => {
|
331 |
+
const element = document.getElementById(id);
|
332 |
+
const value = parseFloat(element.value);
|
333 |
+
if (isNaN(value)) {
|
334 |
+
console.error(`Ошибка: поле ${id} содержит не число! Значение:`, element.value);
|
335 |
+
return 0;
|
336 |
+
}
|
337 |
+
return value;
|
338 |
+
};
|
339 |
+
|
340 |
+
// 2. Формируем объект данных
|
341 |
const data = {
|
342 |
fertilizerConstants: {
|
343 |
"CaN2O6": {
|
344 |
+
"NO3": getValue('fert_ca_no3') / 100,
|
345 |
+
"Ca": getValue('fert_ca_ca') / 100
|
346 |
},
|
347 |
"KNO3": {
|
348 |
+
"NO3": getValue('fert_kno3_no3') / 100,
|
349 |
+
"K": getValue('fert_kno3_k') / 100
|
350 |
},
|
351 |
"NH4NO3": {
|
352 |
+
"NH4": getValue('fert_nh4no3_nh4') / 100,
|
353 |
+
"NO3": getValue('fert_nh4no3_no3') / 100
|
354 |
},
|
355 |
"MgSO4": {
|
356 |
+
"Mg": getValue('fert_mgso4_mg') / 100,
|
357 |
+
"S": getValue('fert_mgso4_s') / 100
|
358 |
},
|
359 |
"KH2PO4": {
|
360 |
+
"P": getValue('fert_kh2po4_p') / 100,
|
361 |
+
"K": getValue('fert_kh2po4_k') / 100
|
362 |
},
|
363 |
"K2SO4": {
|
364 |
+
"K": getValue('fert_k2so4_k') / 100,
|
365 |
+
"S": getValue('fert_k2so4_s') / 100
|
366 |
}
|
367 |
},
|
368 |
profileSettings: {
|
369 |
+
"N": getValue('profile_p'),
|
370 |
+
"P": getValue('profile_k'),
|
371 |
+
"K": getValue('profile_ca'),
|
372 |
+
"Ca": getValue('profile_mg'),
|
373 |
+
"Mg": getValue('profile_s'),
|
374 |
+
"S": getValue('profile_cl'),
|
375 |
+
"NH4": getValue('profile_nh4'),
|
376 |
+
"NO3": getValue('profile_no3'),
|
377 |
+
"liters": parseInt(document.getElementById('liters-input').value) || 1
|
378 |
}
|
379 |
};
|
380 |
|
381 |
+
// 3. Выводим в консоль то, что собираемся отправить
|
382 |
+
console.log("Проверка данных перед отправкой:");
|
383 |
+
console.log(JSON.stringify(data, null, 2)); // Красивое форматирование
|
384 |
+
|
385 |
+
// 4. Проверяем, есть ли ошибки в данных
|
386 |
+
let hasErrors = false;
|
387 |
+
for (const key in data.profileSettings) {
|
388 |
+
if (isNaN(data.profileSettings[key])) {
|
389 |
+
console.error(`Ошибка: profileSettings.${key} = NaN`);
|
390 |
+
hasErrors = true;
|
391 |
+
}
|
392 |
+
}
|
393 |
+
|
394 |
+
for (const fert in data.fertilizerConstants) {
|
395 |
+
for (const elem in data.fertilizerConstants[fert]) {
|
396 |
+
if (isNaN(data.fertilizerConstants[fert][elem])) {
|
397 |
+
console.error(`Ошибка: fertilizerConstants.${fert}.${elem} = NaN`);
|
398 |
+
hasErrors = true;
|
399 |
+
}
|
400 |
+
}
|
401 |
+
}
|
402 |
+
|
403 |
+
if (hasErrors) {
|
404 |
+
console.error("Обнаружены ошибки в данных! Отправка отменена.");
|
405 |
+
return;
|
406 |
+
}
|
407 |
+
|
408 |
+
// 5. Только после проверки отправляем запрос
|
409 |
+
console.log("Отправка данных на сервер...");
|
410 |
var xhr = new XMLHttpRequest();
|
411 |
+
xhr.open("POST", "/calculation", true);
|
412 |
xhr.setRequestHeader("Content-Type", "application/json");
|
413 |
|
414 |
xhr.onreadystatechange = function() {
|
415 |
if (xhr.readyState === 4) {
|
416 |
+
console.log("Статус ответа:", xhr.status);
|
417 |
if (xhr.status === 200) {
|
418 |
+
console.log("Успешный ответ от сервера:", JSON.parse(xhr.responseText));
|
419 |
} else {
|
420 |
+
console.error("Ошибка сервера:", xhr.status, xhr.statusText);
|
421 |
+
console.error("Текст ошибки:", xhr.responseText);
|
422 |
}
|
423 |
}
|
424 |
};
|
425 |
|
426 |
+
xhr.onerror = function() {
|
427 |
+
console.error("Ошибка сети при отправке запроса");
|
428 |
+
};
|
429 |
+
|
430 |
xhr.send(JSON.stringify(data));
|
431 |
});
|
432 |
</script>
|