2016-11-16 3 views
-3

Я работаю над веб-приложением, в котором пользователю предлагается добавить «приложение», введя идентификатор StudentID и JobID. Я использую jQuery, чтобы сообщить пользователю, когда учащийся, которого они ввели, не существует, задание не существует, приложение уже существует в базе данных или когда приложение было успешно добавлено. Я проверяю все на бэкэнд с помощью PHP и отправляю сообщение в интерфейс, чтобы отобразить это для пользователя.jQuery игнорирует else if statement

Все работает нормально до оператора if, который я использую, чтобы решить сообщение, которое я покажу пользователю, на основе сообщения, полученного от бэкэнд.

jQuery полностью игнорирует утверждения «else if». Если первое условие истинно, оно успешно выполняет свое тело, однако, если первое не соответствует действительности, оно переходит прямо в инструкцию else, игнорируя инструкции else if, даже если они истинны.

Вот код:

var myData = {"tablename": tablename, "StudentId": StudentId, "JobId": JobId}; 
      $.ajax({ 
       url: "insert.php", 
       type: "POST", 
       data: myData, 
       success: function (data, status, xhr) { 
        console.log(data); 
        if (data =="success") { 
         $('#message').fadeIn().delay(3000).fadeOut(); 
         $('#StudentId').val(''); 
         $('#JobId').val(''); 
        } else if(data=="fail") { 

         $('#message5').fadeIn().delay(3000).fadeOut(); 

        } else if (data =="student"){ 

         $('#message2').fadeIn().delay(3000).fadeOut(); 
        } 
         else if (data == "job"){ 

         $('#message3').fadeIn().delay(3000).fadeOut(); 
        } 
         else { 

         $('#message4').fadeIn().delay(3000).fadeOut(); 
        } 
       } 

      }); 
+2

Я могу заверить вас, Javascript не пропустите условия вне. Вы действительно должны посмотреть на консоль, чтобы проверить наличие синтаксических ошибок. –

+2

Почему у вас есть условие в вашем последнем '' '' '' '? ('else (data ==" studentjob ")') – Cleared

+3

вы пропустите, если в последнем элементе ("studentjob"). Кстати, вы считали, что используете оператор switch? –

ответ

0

У вас ошибка в вашем if-блоке, последний else имеет состояние. Это должно появиться как ошибка в консоли.

Либо изменение else (data == "studentjob") к

else 

или

else if (data == "studentjob") 
+0

Должно быть, это было непреднамеренно, прежде чем я разместил вопрос, но я просто попробовал его без него, и он все еще не работает. – useruser1412

2

Почему бы вам не использовать switch заявление? Я рекомендую вам использовать его. Оператор switch используется для выполнения различных действий на основе разных условий.

Теперь ваш код должен работать. Вот решение:

switch(data){ 
     case "success": 
      $('#message').fadeIn().delay(3000).fadeOut(); 
      $('#StudentId').val(''); 
      $('#JobId').val(''); 
      break; 
     case "fail": 
      $('#message5').fadeIn().delay(3000).fadeOut(); 
      break; 
     case "student": 
      $('#message2').fadeIn().delay(3000).fadeOut(); 
      break; 
     case "job": 
      $('#message3').fadeIn().delay(3000).fadeOut(); 
      break; 
     case "studentjob": 
      $('#message4').fadeIn().delay(3000).fadeOut(); 
      break;     
} 
+0

Я пробовал, он не работает. Я сделал console.log (данные), чтобы узнать, получает ли оно правильное сообщение об ошибке, но оно все равно игнорирует условия даже при использовании переключателя. И, кстати, это не вызывает никаких ошибок в консоли. – useruser1412

+0

@ useruser1412, можете ли вы разместить свой 'data' json? –

1

Подобно тому, как пример способа проверки, я создал plunker для вас

легкой стратегии является просто создавать тестовые кнопки, которые заставляют ответ вы хотите проверить , и размять его, пока он не будет работать правильно. В идеале, вы должны создать единичные тесты и протестировать их, но я могу себе представить, что вы делаете, что это просто невозможно.

E.g. от plunkr:

HTML

<div> 
    <button onclick="testSuccess()">Success</button> 
    <button onclick="testFail()">Fail</button> 
    <button onclick="testStudent()">Student</button> 
    <button onclick="testJob()">Job</button> 
    <button onclick="testStudentJob()">Student Job</button> 
    <button onclick="testUnexpected()">Unexpected</button> 
</div> 

JavaScript

var testSuccess = function() { 
    successFn("success"); 
} 

var testFail = function() { 
    successFn("fail"); 
} 

var testStudent = function() { 
    successFn("student"); 
} 

var testJob = function() { 
    successFn("job"); 
} 

var testStudentJob = function() { 
    successFn("studentjob"); 
} 

var testUnexpected = function() { 
    successFn("somethingSilly"); 
} 

реорганизовать HTTP вызов:

var myData = {"tablename": tablename, "StudentId": StudentId, "JobId": JobId}; 
      $.ajax({ 
       url: "insert.php", 
       type: "POST", 
       data: myData, 
       success: successFn 
      }); 

И немного изменить ваш если-то еще (очень рекомендую идти с A Предложение lexandru Михая выписок переключателя здесь)

var successFn = function (data, status, xhr) { 
       console.log(data); 
       if (data =="success") { 
        $('#message').fadeIn().delay(3000).fadeOut(); 
        $('#StudentId').val(''); 
        $('#JobId').val(''); 
       } 
       else if(data=="fail") { 

        $('#message5').fadeIn().delay(3000).fadeOut(); 

       } 
       else if (data =="student"){ 

        $('#message2').fadeIn().delay(3000).fadeOut(); 
       } 
       else if (data == "job"){ 

        $('#message3').fadeIn().delay(3000).fadeOut(); 
       } 
       else if (data == "studentjob") { 

        $('#message4').fadeIn().delay(3000).fadeOut(); 
       } 
       else { 
        alert('Unexpected response'); 
       } 
      }; 

https://plnkr.co/edit/KZrWMrcybko6P32yFopz

+0

все еще не работает. – useruser1412

+0

не вызывает ошибок в консоли. он просто игнорирует утверждения else if. – useruser1412

+0

Работы plnkr. Покажите больше своего кода, если нужно. Я бы предложил рефакторинг, как и у меня, и проверил тестовые ответы (как это было предложено в моем плункере). Таким образом, вы можете изолировать ошибки интеграции от ошибок логики. –