DmitrMakeev commited on
Commit
fbfba33
·
verified ·
1 Parent(s): 53f7d02

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +99 -51
nutri_call.html CHANGED
@@ -332,89 +332,120 @@
332
 
333
  <script>
334
  document.getElementById('calculate-btn').addEventListener('click', function() {
335
- // 1. Получаем значение точности округления (гарантированно число от 0 до 6)
 
 
336
  const roundingInput = document.getElementById('rounding-precision');
337
- const roundingPrecision = Math.min(Math.max(parseInt(roundingInput.value) || 3, 6), 0);
 
 
 
338
 
339
- // 2. Улучшенная функция для безопасного получения числового значения
 
 
 
340
  const getValue = (id) => {
341
  const element = document.getElementById(id);
342
  if (!element) {
343
  console.error(`Элемент с ID ${id} не найден!`);
344
  return 0;
345
  }
 
 
346
  const value = parseFloat(element.value);
347
- return isNaN(value) ? 0 : value;
 
 
 
348
  };
349
 
350
- // 3. Формируем данные для сервера (гарантированно включаем rounding_precision)
351
- const requestData = {
352
- fertilizerConstants: {
353
- "Кальциевая селитра": {
354
- "N (NO3-)": getValue('fert_ca_no3') / 100,
355
- "Ca": getValue('fert_ca_ca') / 100
356
- },
357
- "Калий азотнокислый": {
358
- "N (NO3-)": getValue('fert_kno3_no3') / 100,
359
- "K": getValue('fert_kno3_k') / 100
360
- },
361
- "Аммоний азотнокислый": {
362
- "N (NO3-)": getValue('fert_nh4no3_no3') / 100,
363
- "N (NH4+)": getValue('fert_nh4no3_nh4') / 100
364
- },
365
- "Сульфат магния": {
366
- "Mg": getValue('fert_mgso4_mg') / 100,
367
- "S": getValue('fert_mgso4_s') / 100
368
- },
369
- "Монофосфат калия": {
370
- "P": getValue('fert_kh2po4_p') / 100,
371
- "K": getValue('fert_kh2po4_k') / 100
372
- },
373
- "Калий сернокислый": {
374
- "K": getValue('fert_k2so4_k') / 100,
375
- "S": getValue('fert_k2so4_s') / 100
376
- }
377
  },
378
- profileSettings: {
379
- 'P': getValue('profile_p'),
380
- 'K': getValue('profile_k'),
381
- 'Mg': getValue('profile_mg'),
382
- 'Ca': getValue('profile_ca'),
383
- 'S': getValue('profile_s'),
384
- 'NO3_RAT': getValue('profile_no3'),
385
- 'TOTAL_NITROG': getValue('profile_n'),
386
- 'liters': parseInt(document.getElementById('liters-input').value) || 1,
387
- 'rounding_precision': roundingPrecision // Гарантированно добавляем параметр
 
 
 
 
 
 
 
 
 
388
  }
389
  };
390
-
391
- // 4. Проверка данных (остается без изменений)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
392
  const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
393
  "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
394
 
395
  let hasErrors = false;
396
  for (const fert of requiredFertilizers) {
397
  if (!requestData.fertilizerConstants[fert]) {
398
- console.error(`Отсутствует удобрение: ${fert}`);
399
  hasErrors = true;
 
 
400
  }
401
  }
402
 
403
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
404
  for (const field of requiredProfileFields) {
405
  if (isNaN(requestData.profileSettings[field])) {
406
- console.error(`Некорректное значение для параметра ${field}`);
407
  hasErrors = true;
 
 
408
  }
409
  }
410
 
 
 
411
  if (hasErrors) {
412
- alert("Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме.");
 
 
413
  return;
414
  }
415
 
416
- // 5. Отправка данных на сервер с логированием
417
- console.log("Отправляемые данные (включая точность округления):", requestData);
418
 
419
  fetch('/calculation', {
420
  method: 'POST',
@@ -424,16 +455,33 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
424
  body: JSON.stringify(requestData)
425
  })
426
  .then(response => {
427
- if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
 
 
 
 
 
428
  return response.json();
429
  })
430
  .then(data => {
431
- console.log("Ответ сервера:", data);
 
 
 
 
 
 
 
 
 
432
  // Здесь можно добавить обработку ответа
433
  })
434
  .catch(error => {
435
- console.error("Ошибка:", error);
436
  alert("Ошибка при расчете: " + error.message);
 
 
 
437
  });
438
  });
439
  </script>
 
332
 
333
  <script>
334
  document.getElementById('calculate-btn').addEventListener('click', function() {
335
+ console.log("=== НАЧАЛО ОБРАБОТКИ ===");
336
+
337
+ // 1. Получаем значение точности округления с подробным логированием
338
  const roundingInput = document.getElementById('rounding-precision');
339
+ console.log("Значение поля rounding-precision (raw):", roundingInput.value);
340
+
341
+ const initialRounding = parseInt(roundingInput.value);
342
+ console.log("Парсинг значения rounding (после parseInt):", initialRounding);
343
 
344
+ const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
345
+ console.log("Финальное значение точности (0-6):", roundingPrecision);
346
+
347
+ // 2. Улучшенная функция для безопасного получения числового значения с логированием
348
  const getValue = (id) => {
349
  const element = document.getElementById(id);
350
  if (!element) {
351
  console.error(`Элемент с ID ${id} не найден!`);
352
  return 0;
353
  }
354
+ console.log(`Значение поля ${id}:`, element.value);
355
+
356
  const value = parseFloat(element.value);
357
+ const result = isNaN(value) ? 0 : value;
358
+
359
+ console.log(`Парсинг значения ${id}:`, result);
360
+ return result;
361
  };
362
 
363
+ // 3. Формируем данные для сервера с пошаговым логированием
364
+ console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
365
+
366
+ const fertilizerConstants = {
367
+ "Кальциевая селитра": {
368
+ "N (NO3-)": getValue('fert_ca_no3') / 100,
369
+ "Ca": getValue('fert_ca_ca') / 100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  },
371
+ "Калий азотнокислый": {
372
+ "N (NO3-)": getValue('fert_kno3_no3') / 100,
373
+ "K": getValue('fert_kno3_k') / 100
374
+ },
375
+ "Аммоний азотнокислый": {
376
+ "N (NO3-)": getValue('fert_nh4no3_no3') / 100,
377
+ "N (NH4+)": getValue('fert_nh4no3_nh4') / 100
378
+ },
379
+ "Сульфат магния": {
380
+ "Mg": getValue('fert_mgso4_mg') / 100,
381
+ "S": getValue('fert_mgso4_s') / 100
382
+ },
383
+ "Монофосфат калия": {
384
+ "P": getValue('fert_kh2po4_p') / 100,
385
+ "K": getValue('fert_kh2po4_k') / 100
386
+ },
387
+ "Калий сернокислый": {
388
+ "K": getValue('fert_k2so4_k') / 100,
389
+ "S": getValue('fert_k2so4_s') / 100
390
  }
391
  };
392
+
393
+ const profileSettings = {
394
+ 'P': getValue('profile_p'),
395
+ 'K': getValue('profile_k'),
396
+ 'Mg': getValue('profile_mg'),
397
+ 'Ca': getValue('profile_ca'),
398
+ 'S': getValue('profile_s'),
399
+ 'NO3_RAT': getValue('profile_no3'),
400
+ 'TOTAL_NITROG': getValue('profile_n'),
401
+ 'liters': parseInt(document.getElementById('liters-input').value) || 1,
402
+ 'rounding_precision': roundingPrecision
403
+ };
404
+
405
+ const requestData = {
406
+ fertilizerConstants: fertilizerConstants,
407
+ profileSettings: profileSettings
408
+ };
409
+
410
+ console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
411
+
412
+ // 4. Проверка данных с подробным выводом
413
+ console.log("=== ПРОВЕРКА ДАННЫХ ===");
414
+
415
  const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
416
  "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
417
 
418
  let hasErrors = false;
419
  for (const fert of requiredFertilizers) {
420
  if (!requestData.fertilizerConstants[fert]) {
421
+ console.error(`ОШИБКА: Отсутствует удобрение: ${fert}`);
422
  hasErrors = true;
423
+ } else {
424
+ console.log(`Удобрение ${fert} присутствует`);
425
  }
426
  }
427
 
428
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
429
  for (const field of requiredProfileFields) {
430
  if (isNaN(requestData.profileSettings[field])) {
431
+ console.error(`ОШИБКА: Некорректное значение для параметра ${field}`);
432
  hasErrors = true;
433
+ } else {
434
+ console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
435
  }
436
  }
437
 
438
+ console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
439
+
440
  if (hasErrors) {
441
+ const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
442
+ console.error(errorMsg);
443
+ alert(errorMsg);
444
  return;
445
  }
446
 
447
+ // 5. Отправка данных на сервер с полным логированием
448
+ console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
449
 
450
  fetch('/calculation', {
451
  method: 'POST',
 
455
  body: JSON.stringify(requestData)
456
  })
457
  .then(response => {
458
+ console.log("Получен ответ от сервера. Статус:", response.status);
459
+
460
+ if (!response.ok) {
461
+ console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
462
+ throw new Error(`HTTP error! status: ${response.status}`);
463
+ }
464
  return response.json();
465
  })
466
  .then(data => {
467
+ console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", data);
468
+
469
+ // Проверяем, применилась ли точность округления
470
+ console.log("Проверка округления в ответе:");
471
+ if (data.fertilizers) {
472
+ Object.entries(data.fertilizers).forEach(([name, values]) => {
473
+ console.log(`Удобрение ${name}:`, values);
474
+ });
475
+ }
476
+
477
  // Здесь можно добавить обработку ответа
478
  })
479
  .catch(error => {
480
+ console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
481
  alert("Ошибка при расчете: " + error.message);
482
+ })
483
+ .finally(() => {
484
+ console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
485
  });
486
  });
487
  </script>