No Description

handleSubmit.js 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. function handleSubmit(event, formName) {
  2. // Prevent naive submit
  3. event.preventDefault();
  4. // Fetch error description element
  5. var errorDescription = document.querySelector('#error-'+formName+' .error-description');
  6. var submitButton = document.querySelector('#'+formName+' button[type="submit"]');
  7. // Disable button and start "Loading" state
  8. submitButton.disabled = true;
  9. submitButton.classList.remove('btn-danger');
  10. submitButton.classList.add('btn-primary');
  11. submitButton.innerHTML = '<div class="loader"></div>Loading...';
  12. // Fetch all input from form
  13. var fields = {};
  14. $("form#" + formName).find("input, textarea, select, button[type='submit']").each(function() {
  15. var input = $(this);
  16. fields[input.attr('name')] = input.val();
  17. });
  18. // Construct request URL (make sure to use http or https accordingly)
  19. var baseURI = document.location.protocol + "//tania.uprrp.edu/admin_nuevo/processes/";
  20. var fullURI = baseURI;
  21. switch(formName) {
  22. // home.php
  23. case "newExperience":
  24. fullURI += "insertExperience.php";
  25. break;
  26. // viewExperience.php
  27. case "editForm":
  28. fullURI += "updateExperience.php";
  29. break;
  30. case "newQuestionnaire":
  31. fullURI += "insertQuestionnaire.php";
  32. break;
  33. case "newMoment":
  34. fullURI += "insertMoment.php";
  35. break;
  36. case "newMilestone":
  37. fullURI += "insertMilestone.php";
  38. break;
  39. // viewQuestionnaire.php
  40. case "updateQuestionnaire":
  41. fullURI += "updateQuestionnaire.php";
  42. break;
  43. case "deleteQuestionnaire":
  44. fullURI += "deleteQuestionnaire.php";
  45. break;
  46. case "newQuestion":
  47. fullURI += "insertQuestionToQuestionnaire.php";
  48. break;
  49. case "deleteQuestion":
  50. fullURI += "deleteQuestion.php";
  51. break;
  52. // viewMoment.php
  53. case "updateMoment":
  54. fullURI += "updateMoment.php";
  55. break;
  56. case "deleteMoment":
  57. fullURI += "deleteMoment.php";
  58. break;
  59. case "removeQuestionFromMoment":
  60. fullURI += "removeQuestionFromMoment.php";
  61. break;
  62. case "addExistingQuestionToMoment":
  63. fullURI += "addExistingQuestionToMoment.php";
  64. break;
  65. // Both viewMoment.php and viewQuestionnaire.php
  66. case "updateQuestion":
  67. fullURI += "updateQuestion.php";
  68. break;
  69. default:
  70. fullURI = document.location.protocol + '//tania.uprrp.edu/admin_nuevo/test.php';
  71. }
  72. // console.log(JSON.stringify(fields) + "\n" + fullURI);
  73. // Use fullURI to make POST request w/ jQuery,
  74. // Wait for response (start "Loading" state),
  75. // Act according to error or success
  76. // !!!!!! SHOULD ADD TIMEOUT TO REQUESTS TO !!!!!!!
  77. $.post(fullURI, fields)
  78. .done(function(data, text) {
  79. console.log(data + "and" + text);
  80. // Fetch needed elements
  81. let alert = document.querySelector('#error-'+formName+' .alert');
  82. let errorLead = document.querySelector('#error-'+formName+' .error-lead');
  83. // Clear errors and change message to "Success"
  84. errorDescription.remove();
  85. errorLead.innerText = "Success!";
  86. errorLead.style.marginBottom = "0";
  87. // Change alert style to "Success"
  88. alert.classList.remove('alert-danger');
  89. alert.classList.add('alert-success');
  90. // Change button style to "Success"
  91. submitButton.classList.remove('btn-primary');
  92. submitButton.classList.add('btn-success');
  93. submitButton.innerHTML = '<span class="glyphicon glyphicon-ok"></span> Success!';// could use &#10004;
  94. // Reload page
  95. setTimeout(function() {
  96. let deleteForms = ["deleteQuestionnaire", "deleteMoment", "deleteExperience"];
  97. if(deleteForms.includes(formName)) {
  98. history.back(); // go back to viewExperience page (remember we don't know the ID of the experience it came from)
  99. } else {
  100. location.reload();
  101. }
  102. }, 250);
  103. })
  104. .fail(function(request, status, error) {
  105. console.log(request.responseText);
  106. console.log(status);
  107. console.log(error);
  108. // Fetch needed elements
  109. let alertContainer = document.getElementById('error-'+formName);
  110. // If response is not a JSON, or if JSON doesn't have "error" field, say so
  111. // else, dynamically update error message according to server
  112. if(!isJSON(request.responseText) || JSON.parse(request.responseText).error === undefined) {
  113. errorDescription.innerText = "Something went wrong on our side! Please try again later.";
  114. } else {
  115. errorDescription.innerText = JSON.parse(request.responseText).error;
  116. }
  117. // Change button style to "Retry"
  118. submitButton.innerHTML = "Retry";
  119. submitButton.disabled = false;
  120. // Display alert
  121. alertContainer.style.display = "initial";
  122. });
  123. // .always(function(data, textStatus, errorThrown) {
  124. // console.log(data);
  125. // console.log(textStatus);
  126. // console.log(errorThrown);
  127. // });
  128. }