DmitrMakeev commited on
Commit
2dcc520
·
verified ·
1 Parent(s): 8313773

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +58 -66
nutri_call.html CHANGED
@@ -335,27 +335,23 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
335
  const getValue = (id) => {
336
  const element = document.getElementById(id);
337
  const value = parseFloat(element.value);
338
- if (isNaN(value)) {
339
- console.error(`Ошибка: поле ${id} содержит не число! Значение:`, element.value);
340
- return 0;
341
- }
342
- return value;
343
  };
344
 
345
- // 2. Формируем данные в ТОЧНОМ формате для сервера
346
  const requestData = {
347
  fertilizerConstants: {
348
  "Кальциевая селитра": {
349
- "N (NO3-)": getValue('fert_ca_no3') / 100,
350
  "Ca": getValue('fert_ca_ca') / 100
351
  },
352
  "Калий азотнокислый": {
353
- "N (NO3-)": getValue('fert_kno3_no3') / 100,
354
  "K": getValue('fert_kno3_k') / 100
355
  },
356
  "Аммоний азотнокислый": {
357
- "N (NO3-)": getValue('fert_nh4no3_no3') / 100,
358
- "N (NH4+)": getValue('fert_nh4no3_nh4') / 100
359
  },
360
  "Сульфат магния": {
361
  "Mg": getValue('fert_mgso4_mg') / 100,
@@ -371,69 +367,65 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
371
  }
372
  },
373
  profileSettings: {
374
- 'P': getValue('profile_k'),
375
- 'K': getValue('profile_ca'),
376
- 'Mg': getValue('profile_s'),
377
- 'Ca': getValue('profile_mg'),
378
- 'S': getValue('profile_cl'),
379
- 'N (NO3-)': getValue('profile_no3'),
380
- 'N (NH4+)': getValue('profile_nh4'),
381
- 'liters': parseInt(document.getElementById('liters-input').value) || 1
382
  }
383
  };
384
 
385
- // 3. Выводим данные для проверки
386
- console.log("Данные для отправки на сервер:");
387
- console.log(JSON.stringify(requestData, null, 2));
388
-
389
- // 4. Проверка данных
390
- let hasErrors = false;
391
- const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
392
- "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
393
-
394
- for (const fert of requiredFertilizers) {
395
- if (!requestData.fertilizerConstants[fert]) {
396
- console.error(`Отсутствует удобрение: ${fert}`);
397
- hasErrors = true;
398
- }
399
- }
 
 
 
 
400
 
401
- const requiredElements = ['P', 'K', 'Mg', 'Ca', 'S', 'N (NO3-)', 'N (NH4+)'];
402
- for (const elem of requiredElements) {
403
- if (isNaN(requestData.profileSettings[elem])) {
404
- console.error(`Некорректное значение для элемента ${elem}`);
405
- hasErrors = true;
406
- }
407
- }
408
 
409
- if (hasErrors) {
410
- console.error("Обнаружены ошибки в данных! Отправка отменена.");
411
- return;
412
- }
413
-
414
- // 5. Отправка данных на сервер
415
- console.log("Отправка данных на сервер...");
416
- const xhr = new XMLHttpRequest();
417
- xhr.open("POST", "/calculation", true);
418
- xhr.setRequestHeader("Content-Type", "application/json");
419
-
420
- xhr.onreadystatechange = function() {
421
- if (xhr.readyState === 4) {
422
- console.log("Статус ответа:", xhr.status);
423
- if (xhr.status === 200) {
424
- console.log("Успешный ответ от сервера:", JSON.parse(xhr.responseText));
425
- } else {
426
- console.error("Ошибка сервера:", xhr.status, xhr.statusText);
427
- console.error("Текст ошибки:", xhr.responseText);
428
  }
 
 
 
 
 
 
429
  }
430
- };
431
-
432
- xhr.onerror = function() {
433
- console.error("Ошибка сети при отправке запроса");
434
- };
435
-
436
- xhr.send(JSON.stringify(requestData));
437
  });
438
  </script>
439
 
 
335
  const getValue = (id) => {
336
  const element = document.getElementById(id);
337
  const value = parseFloat(element.value);
338
+ return isNaN(value) ? 0 : value;
 
 
 
 
339
  };
340
 
341
+ // 2. Формируем данные для отправки
342
  const requestData = {
343
  fertilizerConstants: {
344
  "Кальциевая селитра": {
345
+ "NO3": getValue('fert_ca_no3') / 100,
346
  "Ca": getValue('fert_ca_ca') / 100
347
  },
348
  "Калий азотнокислый": {
349
+ "NO3": getValue('fert_kno3_no3') / 100,
350
  "K": getValue('fert_kno3_k') / 100
351
  },
352
  "Аммоний азотнокислый": {
353
+ "NO3": getValue('fert_nh4no3_no3') / 100,
354
+ "NH4": getValue('fert_nh4no3_nh4') / 100
355
  },
356
  "Сульфат магния": {
357
  "Mg": getValue('fert_mgso4_mg') / 100,
 
367
  }
368
  },
369
  profileSettings: {
370
+ 'P': getValue('profile_p'),
371
+ 'K': getValue('profile_k'),
372
+ 'Mg': getValue('profile_mg'),
373
+ 'Ca': getValue('profile_ca'),
374
+ 'S': getValue('profile_s'),
375
+ 'N-NO3': getValue('profile_no3'),
376
+ 'N-NH4': getValue('profile_nh4'),
377
+ 'volume': parseInt(document.getElementById('liters-input').value) || 1
378
  }
379
  };
380
 
381
+ // 3. Отправка данных на сервер
382
+ fetch('/calculation', {
383
+ method: 'POST',
384
+ headers: {
385
+ 'Content-Type': 'application/json'
386
+ },
387
+ body: JSON.stringify(requestData)
388
+ })
389
+ .then(response => response.json())
390
+ .then(data => {
391
+ // 4. Обработка ответа от сервера
392
+ const fertilizerMap = {
393
+ "Сульфат магния": "magnesium_sulfate",
394
+ "Кальциевая селитра": "calcium_nitrate",
395
+ "Монофосфат калия": "monopotassium_phosphate",
396
+ "Аммоний азотнокислый": "ammonium_nitrate",
397
+ "Калий сернокислый": "potassium_sulfate",
398
+ "Калий азотнокислый": "potassium_nitrate"
399
+ };
400
 
401
+ // Очищаем все поля перед заполнением
402
+ Object.values(fertilizerMap).forEach(id => {
403
+ const field = document.getElementById(id);
404
+ if (field) field.value = "0";
405
+ });
 
 
406
 
407
+ // Заполняем данные из ответа
408
+ data.fertilizers.forEach(fert => {
409
+ const fieldId = fertilizerMap[fert.name];
410
+ if (fieldId) {
411
+ const field = document.getElementById(fieldId);
412
+ if (field) {
413
+ field.value = fert.grams.toFixed(3);
414
+ }
 
 
 
 
 
 
 
 
 
 
 
415
  }
416
+ });
417
+
418
+ // Выводим EC
419
+ const ecField = document.getElementById('ec-value');
420
+ if (ecField) {
421
+ ecField.textContent = data.ec.toFixed(2);
422
  }
423
+
424
+ console.log("Данные успешно обработаны!");
425
+ })
426
+ .catch(error => {
427
+ console.error("Ошибка при отправке/получении данных:", error);
428
+ });
 
429
  });
430
  </script>
431