DmitrMakeev commited on
Commit
f730cf4
·
verified ·
1 Parent(s): 994e0b6

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +50 -57
nutri_call.html CHANGED
@@ -326,18 +326,13 @@
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 requestData = {
342
  fertilizerConstants: {
343
  "Кальциевая селитра": {
@@ -373,62 +368,60 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
373
  'S': getValue('profile_cl'),
374
  'N (NO3-)': getValue('profile_no3'),
375
  'N (NH4+)': getValue('profile_nh4'),
376
- 'liters': parseInt(document.getElementById('liters-input').value) || 1
377
  }
378
  };
379
 
380
- // 3. Выводим данные для проверки
381
- console.log("Данные для отправки на сервер:");
382
- console.log(JSON.stringify(requestData, null, 2));
383
-
384
- // 4. Проверка данных
385
- let hasErrors = false;
386
- const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
387
- "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
388
-
389
- for (const fert of requiredFertilizers) {
390
- if (!requestData.fertilizerConstants[fert]) {
391
- console.error(`Отсутствует удобрение: ${fert}`);
392
- hasErrors = true;
393
  }
394
- }
 
 
 
 
 
 
 
 
 
 
 
395
 
396
- const requiredElements = ['P', 'K', 'Mg', 'Ca', 'S', 'N (NO3-)', 'N (NH4+)'];
397
- for (const elem of requiredElements) {
398
- if (isNaN(requestData.profileSettings[elem])) {
399
- console.error(`Некорректное значение для элемента ${elem}`);
400
- hasErrors = true;
401
- }
402
- }
403
 
404
- if (hasErrors) {
405
- console.error("Обнаружены ошибки в данных! Отправка отменена.");
406
- return;
407
- }
408
-
409
- // 5. Отправка данных на сервер
410
- console.log("Отправка данных на сервер...");
411
- const xhr = new XMLHttpRequest();
412
- xhr.open("POST", "/calculation", true);
413
- xhr.setRequestHeader("Content-Type", "application/json");
414
-
415
- xhr.onreadystatechange = function() {
416
- if (xhr.readyState === 4) {
417
- console.log("Статус ответа:", xhr.status);
418
- if (xhr.status === 200) {
419
- console.log("Успешный ответ от сервера:", JSON.parse(xhr.responseText));
420
- } else {
421
- console.error("Ошибка сервера:", xhr.status, xhr.statusText);
422
- console.error("Текст ошибки:", xhr.responseText);
423
  }
 
 
 
 
 
 
424
  }
425
- };
426
-
427
- xhr.onerror = function() {
428
- console.error("Ошибка сети при отправке запроса");
429
- };
430
-
431
- xhr.send(JSON.stringify(requestData));
432
  });
433
  </script>
434
 
 
326
 
327
  <script>
328
  document.getElementById('calculate-btn').addEventListener('click', function() {
329
+ // Получение значений с проверкой
330
  const getValue = (id) => {
331
+ const val = parseFloat(document.getElementById(id)?.value);
332
+ return isNaN(val) ? 0 : val;
 
 
 
 
 
333
  };
334
 
335
+ // Формирование данных для сервера
336
  const requestData = {
337
  fertilizerConstants: {
338
  "Кальциевая селитра": {
 
368
  'S': getValue('profile_cl'),
369
  'N (NO3-)': getValue('profile_no3'),
370
  'N (NH4+)': getValue('profile_nh4'),
371
+ 'liters': parseInt(document.getElementById('liters-input')?.value) || 1
372
  }
373
  };
374
 
375
+ // Отправка на сервер
376
+ fetch('/calculation', {
377
+ method: 'POST',
378
+ headers: {
379
+ 'Content-Type': 'application/json',
380
+ },
381
+ body: JSON.stringify(requestData)
382
+ })
383
+ .then(response => {
384
+ if (!response.ok) {
385
+ throw new Error(`HTTP error! status: ${response.status}`);
 
 
386
  }
387
+ return response.json();
388
+ })
389
+ .then(data => {
390
+ // Заполнение полей с результатами
391
+ const fertilizerFields = {
392
+ "Сульфат магния": "magnesium_sulfate",
393
+ "Кальциевая селитра": "calcium_nitrate",
394
+ "Монофосфат калия": "monopotassium_phosphate",
395
+ "Аммоний азотнокислый": "ammonium_nitrate",
396
+ "Калий сернокислый": "potassium_sulfate",
397
+ "Калий азотнокислый": "potassium_nitrate"
398
+ };
399
 
400
+ // Очистка полей перед заполнением
401
+ Object.values(fertilizerFields).forEach(id => {
402
+ const field = document.getElementById(id);
403
+ if (field) field.value = '';
404
+ });
 
 
405
 
406
+ // Заполнение граммовок удобрений
407
+ data.fertilizers?.forEach(fert => {
408
+ const fieldId = fertilizerFields[fert.name];
409
+ if (fieldId) {
410
+ const field = document.getElementById(fieldId);
411
+ if (field) field.value = fert.grams?.toFixed(3) || "0";
 
 
 
 
 
 
 
 
 
 
 
 
 
412
  }
413
+ });
414
+
415
+ // Заполнение EC если есть поле
416
+ const ecField = document.getElementById('profile_ec');
417
+ if (ecField && data.ec !== undefined) {
418
+ ecField.value = data.ec.toFixed(2);
419
  }
420
+ })
421
+ .catch(error => {
422
+ console.error('Ошибка:', error);
423
+ alert('Ошибка при расчете: ' + error.message);
424
+ });
 
 
425
  });
426
  </script>
427