У меня такая проблема. Я использую ajax для публикации значений на php. Скрипты работают нормально, но когда я использую console.log (результат), он показывает, что результат возвращается пустым. Это для поля даты в моей форме. Вот мой код поля ввода: <input type="date" name="bday" class="bday" placeholder="Enter birthday" required="true" />. Затем я отправляю информацию в этот код, который выполняет обработку ошибок:
`

public function validatebday($bday){
                //Check if date is valid
                $valid_date = validateDate($bday);

                if($valid_date != true){
                    return 'Not a valid date!';
                } elseif ($valid_date === true) {
                    //Check if the birthday valid
                    $dob = new DateTime($bday);
                    $age = $dob->diff(new DateTime);
                    $age = $age->y;

                    if($age < 4){
                        return 'You are too young!';
                    }
                }
                return true;
            } //End age check`

Мой сценарий jquery выглядит так:

//Checking the birthday
self.config.bdayInput.on('blur', function(){
    let bdate = new Date($.trim(self.config.bdayInput.val()));
    let day = ("0" + bdate.getDate()).slice(-2);
    let month = ("0" + (bdate.getMonth() + 1)).slice(-2);
    let bday = bdate.getFullYear()+"-"+(month)+"-"+(day);
    console.log(bday);
    $.ajax({
        data: 'bday=' +bday,
        success: function(result){
            result = $.trim(result);
            console.log(result);
            //Check if the user is old enough
            if(result === 'You are too young!'){
                self.config.bdayerrdiv.addClass('signuperrdiv');
                self.config.bdayerrSpan.addClass('erroroutput').text(result);
                self.config.bdayErr = true;
                return;
            };

            //Checks if the date is a valid date
            if(result === 'Not a valid date!'){
                self.config.bdayerrdiv.addClass('signuperrdiv');
                self.config.bdayerrSpan.addClass('erroroutput').text(result);
                self.config.bdayErr = true;
                return;                        
            };
        }
    });

Когда дата неверна, появляется сообщение об ошибке, а если возраст слишком мал, я получаю сообщение об ошибке, но если оба пройдены, я получаю это на своей консоли:

enter image description here

Есть идеи, как я могу это исправить, пожалуйста?

Вот мой код, подтверждающий дату:

function validateDate($input_date){

    /*
     * This function does not take in account when the user capture the name of the month instead of the number, eg: Jan, Feb as there are way too many variants for this.  This function is based on the standard format on how the date is stored in Mysql which is yyyy-mm-dd
     */

    //Convert the input date Year, month and day.
    $date = explode('-', $input_date);

    //Split date into YYYY-MM-DD to work with
    $year = (int)$date[0];
    $month = (int)$date[1];
    $day = (int)$date[2];

    //Check is all parameters in the date string is numeric
    if(!is_numeric($year) || !is_numeric($month) || !is_numeric($day)){
        //Return false if any of them is not numeric
        return false;
    }

    //Checks that the year has got 4 digists
    if(strlen($year) < 4){
        return false;
    }

    //Get the leap years from 1700 up to the year that is part of the date string
    //Set initial count
    $count = 0;

    //Set the intervals to determine each leap year.
    $interval = 4;

    //Placeholder to hold leap years.
    $leap_years = array();

        //Loop through the days to determine the leap years.  We start checking from the year 1692 until the year that was entered in the input date.
    for($i = 1692; $i <= $year;$i++ ){
        if($count === $interval){
            $leap_years[] .= $count + $i;
            //Reset count back to 0
            $count = 0;
        }
        //Increment the count.
        $count++;
    }

    //Set the first day of the month
    $first_day_of_month = 1;

    //Determine the last day of the month
    if($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month ==8 || $month == 10 || $month == 12){
        //Set the value for the last day of the month.
        $last_day_of_month = 31;
    }elseif($month == 4 || $month == 6 || $month == 9 || $month == 11){
        //Set the value for the last day of the month.
        $last_day_of_month = 30;
    }elseif($month == 2){
        //Check if the year is a leap year
        if(in_array($year, $leap_years)){
            //Set the last day to 29
            $last_day_of_month = 29;
        }else{
            //Set the last day to 28
            $last_day_of_month = 28;
        }
    }

    //Check the valid first and last days of the month
    if($day < $first_day_of_month){
        //Return false if the day is smaller than 0
        return false;
    }

    //Check if the month if from 1 to 12
    if($month < 1 || $month > 12){
        //Return false of the month is from 1 to 12.
        return false;
    }

    //Check for a valid end date
    if($day > $last_day_of_month){
        //Return false if the day is bigger than the last day of the specific month
        return false;
    }
    //Return true if all the checks passed
    return true;
}
0
Willem 6 Ноя 2018 в 23:38

1 ответ

Лучший ответ

В вашем PHP-скрипте вы возвращаете true, если проверка прошла. Когда это возвращается через вашу функцию jQuery, вы не получаете «настоящего» ответа. Т.е. В вашем PHP-скрипте вместо возврата true верните "valid" (в виде строки) и посмотрите, появляется ли это в вашем console.log().

0
Elliot Reed 6 Ноя 2018 в 20:45