2015-09-08 2 views
1

Я пытаюсь использовать ajaxPOST метод проверки номера курса на моей странице. helper.html отправляет правильное значение i (true или false); который устанавливает ValidCourse в true, если это действительный курс. Но когда я проверю значение ValidCourse после вызова ajax; он всегда остается «false». Зачем?

if (EnrollmentsCount == 0) { // validate course 
    var crsNum = "'" + $j("#course_number").val() + "'"; 
    var ValidCourse = false; 
    // Ajax call to determine if course is valid course 
    $.ajax({ 
     type: 'POST', 
     url: 'helper.html?crsNum=' + crsNum, 
     async: false, 
     success: function(i) { 
      if (i === 'true') { 
       ValidCourse = true; 
      } 
     } 
    }); 

    if (!ValidCourse) { //it is always false whether it is a valid or invalid course   
     var errorMsg = "Please enter valid course number"; 
     scroll('#course_number'); 
    } 
} 
+2

Какое точное значение, на которое отвечает helper.html? –

+0

Почему вы используете 'async: false'? Это почти всегда идея * плохой. –

+0

Что означает 'console.log (i)' показывает вас в обратном вызове 'success'? –

ответ

0

Могу ли я увидеть исходный код в helper.html?

может быть, это проблема, которую вы используете

var crsNum = "'" + $j("#course_number").val() + "'"; 

попробовать использовать

var crsNum = $("#course_number").val(); 
+0

работает в любом случае. Html-страница работает нормально; давая мне истинное значение для действительного и ложного для недействительного курса. Благодаря! – Kaur

+0

ваше приветствие :) –

1

Наглядно, ваша проблема может быть === оператор, который вы используете.

Я думаю, что ваш HTML-страницы в возвращаемое значение true в настоящее время рассматривается как логическое значение с помощью JavaScript, то i имеет логическое значение, но вы проверяете против строки в 'true'. Поэтому попробуйте ваш тест как if(i === true)

Нужно содержимое html-страницы для дальнейшей отладки!

+0

Возвращаемое значение с html-страницы является логическим. Я использую '===' три равных знака для установки переменной ValidCourse, конвертируя ее из строки в boolean. html-страница - это просто запрос на проверку базы данных, если курс существует или нет. Он возвращает true или false. – Kaur

+1

Ну, тогда может быть проблема с областью. Попробуйте ввести код 'if (! ValidCourse)' _indide_ '' if (i === 'true') '. – afrin216

1

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

+0

Я попробовал следующий код 'if (EnrollmentsCount == 0) { \t \t \t var crsNum =" '"+ $ j (" # course_number "). Val() +"' "; \t \t \t var ValidCourse = false; \t \t \t \t \t \t $.Ajax ({ \t \t \t \t \t типа: 'POST', \t \t \t \t \t URL: '? editsechelper.html crsNum =' + crsNum, \t \t \t \t \t асинхронной: ложь, \t \t \t \t \t успех: функция (i) { \t \t \t \t \t \t \t, если (я === 'ложь') {\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t действует = ложь; \t \t \t \t \t \t \t \t вар ErrorMsg = "Пожалуйста, введите действительный номер курса"; scroll ('# course_number'); \t} \t \t \t \t \t} \t \t \t}); 'Он не устанавливает значения для errormsg и valid (логическая переменная) при вводе неверного курса #. – Kaur

+0

вам также нужно обработать условие для истины. Как я вижу из кода, u r обрабатывает только если условие ложно. Вы можете обращаться с условием для истинного оператора так же. If (i === 'false') {\t valid = false; var errorMsg = "Введите действительный номер курса"; прокрутки ('# course_number'); \t} else {valid = true "errorMsg =" ";} – chetank

+0

Извините, что он все еще полностью игнорирует недействительные курсы (ложное значение) и работает с действительными курсами. Мне нужно поймать недопустимые данные. – Kaur

0

Возвращаемое значение из helper.html имело фид и пространство. Следующее позаботилось об этом. Всем спасибо!

if (i.replace(/\s+/g, ' ').trim() === 'true') { 
    ValidCourse = true; 
      } 
     } 
    });