DmitrMakeev commited on
Commit
2e431d9
·
verified ·
1 Parent(s): bbcd19b

Update nutri_call.html

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