ajax Функция успеха не работает, dataType равен json - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь добавить запись о посещаемости для группы студентов (одного класса), используя модальный Bootstrap.

Ниже приведен код моего bootstrap модального окна (в котором я использовал форма)

<div id = "add_attendance_modal" class = "modal fade">
    <div class="modal-dialog mw-100 w-75">
        <form action="post" id = "add_attendance_form">
            <div class = "modal-content">
                <div class = "modal-header">
                    <h4 class = "modal-title">Add Attendance Record</h4>
                    <button type = "button" class = "close" data-dismiss="modal">&times;</button>
                </div>
                <div class = "modal-body">
                    <div class ="form-group">
                        <div class = "row">
                            <label class = "col-md-4 text-right">Attendance Date</label>
                            <div class = "col-md-8">
                                <input type="date" name = "attendance_date" id = "attendance_date" class = "form-control" />
                            </div>
                        </div>
                    </div>
                    <div class = "form-group" id = "student_details">
                        <div class = "table-responsive">
                            <table class = "table table-striped table-bordered">
                                <thead>
                                    <tr>
                                        <th>Roll Number</th>
                                        <th>Student Name</th>
                                        <th>Present</th>
                                        <th>Leave</th>
                                        <th>Absent</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php 
                        foreach($students as $student)
                        {
                            ?>
                            <tr>
                                <td><?php echo $student['username']; ?></td>
                                <td><?php echo $student['name']; ?>
                                    <input type="hidden" name = "student_id[]" value = "<?php echo $student["id"] ?>">
                                </td>
                                <td><input type="radio" name = "attendance_status<?php echo $student['id']; ?>" checked value = "Present" /></td>
                                <td><input type="radio" name = "attendance_status<?php echo $student['id']; ?>" value = "Absent" /></td>
                                <td><input type="radio" name = "attendance_status<?php echo $student['id']; ?>" value = "Leave" /></td>
                            </tr>
                        <?php  }
                     ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
                <div class = "modal-footer">
                    <input type="submit" name = "add_attendance_submit" id = "add_attendance_submit" class = "btn btn-success" value = "Add Attendance" />
                    <button type = "button" class = "btn btn-danger" data-dismiss="modal">Close</button>
                </div>
            </div>
        </form>
    </div>
</div>

$ студенты - это массив всех студентов определенного класса ..

Ниже приведен мой код Ajax в Javascript с которым я пытаюсь работать,

$("#add_attendance_form").on('submit', function(event){
    event.preventDefault(); 
    $.ajax({
        url:"attendance_action.php", 
        method: "POST", 
        data: $(this).serialize() + "&action = add_attendance", 
        dataType: 'json', 
        beforeSend: function()
        {
            $("#add_attendance_submit").val("Validating...."); 
            $("#add_attendance_submit").attr('disabled', true); 
        },
        success:function(data)
        {
            
            $("#add_attendance_submit").val("Add Attendance"); 
            $("#add_attendance_submit").attr('disabled', false);
            if (data.success)
            {
                $('message_operation').html('<div class = "alert alert-success">'+data.success+'</div>');
                $('#add_attendance_modal').modal('hide');
                dataTable.ajax.reload();  
            } 
            if (data.error)
            {
                if (data.error_attendance_date != '')
                    $("#error_attendance_date").text(data.error_attendance_date);
                else 
                    $("#error_attendance_date").text('');
            }
            
        },
        error: function(e)
            {
                console.log(e); 
                alert("error"); 
            }
    });
});

Это код PHP в Attentionance_action. php

if (isset($_POST['action']) && $_POST['action'] == "add_attendance")
{
    $attendance_date = '';  
    $error_attendance_date = ''; 
    $output = ''; 
    $error = 0; 
    if ($_POST['attendance_date'] == '')
    {
        $error_attendance_date = "Attendance Date is Required..."; 
        $error++; 
    }
    else 
    {
        $attendance_date = $_POST['attendance_date'];
    }
    if ($error > 0)
    {
        $output = array(
                    "error"                 => true, 
                    "error_attendance_date" => $error_attendance_date
        );
    }
    else 
    {
        $student_id = $_POST['student_id'];
        $results = check_attendance_records($student_id[0], $attendance_date);
        if ($results->rowCount() > 0)
        {
            $output = array(
                        'error'             => true, 
                        'error_attendance_date' => 'Attendance data already exists on this data'
            );
        }
        else 
        {
            for ($count = 0; $count < count($student_id); $count++)
            {
                $data = array(

                    ':student_id'               => $student_id[$count],
                    ':attendance_status'        => $_POST["attendance_status".$student_id[$count].""],
                    ':attendace_date'           => $attendance_date
                    );
                $db->insert_to_attendance_table($data, $id); // Where $id is teacher id

            }
            $output = array(
                'success'               => 'Data Added Successfully'
            );
        }
    }
    echo json_encode($output); 
}

И, наконец, вот функция базы данных, используемая в действие посещаемости. php (в случае, если кому-то нужно взглянуть на это) ... Они определены в классе базы данных, объектом которого является $ db.

 public function check_attendance_records($student_id, $date)
    {
      $data = array();
      $sql = "select * from junc_attendance where student_id = :student_id AND date = :date";

      $stmt = $this->conn->prepare($sql); 
      $data['classroom_id'] = $classroom_id; 
  $stmt->execute($data);
      $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
      return $result; 
    }
    public function insert_to_attendance_table($data, $teacher_id)
    {
      $class_data = get_classroom_details($teacher_id);
      $classroom_id = $class_data['id'];
      $sql = "INSERT INTO jnc_attendance(classroom_id, date, student_id, status) VALUES (:attendance_date, :classroom_id, :student_id, :attendance_status)";
      $stmt = $this->conn->prepare($sql);
      $stmt->execute(['classroom_id' => $classroom_id], $data);
      return true;
    }

Мне нужны данные в форме json, поэтому я использовал dataType как json.

Я использовал три разных условия, сначала проверяется, пуста ли дата посещаемости ... Второй проверяет, используется ли уже дата посещаемости, а третий - условие успеха, если все проходит. ht. Но функция ajax выдает ошибку при всех условиях и всегда вызывает функцию error вместо success .

Может ли кто-нибудь помочь мне и указать на ошибка? Буду очень благодарен Я попытался использовать команду console.log (e) в поле ошибки, но ничего не понял.

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

Данные, отправленные в Activity_action. php (как видно из сети в инструментах) Я не выбрал какую-либо дату, и, следовательно, Activity_date здесь пуста.

attendance_date: 
student_id[]: 2
attendance_status2: Present
student_id[]: 3
attendance_status3: Present
student_id[]: 4
attendance_status4: Present
action :  add_attendance

Из console.log (e) это то, что я получаю (это довольно длинный ответ, однако я его совсем не понимаю: /)

{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
abort: ƒ (e)
always: ƒ ()
catch: ƒ (e)
done: ƒ ()
fail: ƒ ()
getAllResponseHeaders: ƒ ()
getResponseHeader: ƒ (e)
overrideMimeType: ƒ (e)
pipe: ƒ ()
progress: ƒ ()
promise: ƒ (e)
readyState: 4
responseText: ""
setRequestHeader: ƒ (e,t)
state: ƒ ()
status: 200
statusCode: ƒ (e)
statusText: "OK"
then: ƒ (t,r,i)
__proto__: Object

Я могу открыть любой из них и все go в бесконечный l oop на протокол . Однако не могу понять, почему ... Пытался найти эту ошибку, обнаружил, что мне нужно вернуть мои данные в форме json, но я уже делаю это.

* Это то, что Я получил, при открытии "готово" немного ... Это можно открыть дальше, но похожие поля все еще появляются *

done: ƒ ()
arguments: (...)
caller: (...)
length: 0
name: "add"
prototype:
constructor: ƒ ()
__proto__:
constructor: ƒ Object()
arguments: (...)
assign: ƒ assign()
arguments: (...)
caller: (...)
length: 2
name: "assign"
__proto__: ƒ ()
apply: ƒ apply()
arguments: (...)
bind: ƒ bind()
call: ƒ call()
caller: (...)
constructor: ƒ Function()
length: 0
name: ""
toString: ƒ toString()
Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
get arguments: ƒ ()
set arguments: ƒ ()
get caller: ƒ ()
set caller: ƒ ()
__proto__: Object
[[FunctionLocation]]: <unknown>
[[Scopes]]: Scopes[0]
[[Scopes]]: Scopes[0]
caller: (...)
create: ƒ create()
defineProperties: ƒ defineProperties()
defineProperty: ƒ defineProperty()
entries: ƒ entries()
freeze: ƒ freeze()
fromEntries: ƒ fromEntries()
getOwnPropertyDescriptor: ƒ getOwnPropertyDescriptor()
getOwnPropertyDescriptors: ƒ getOwnPropertyDescriptors()
getOwnPropertyNames: ƒ getOwnPropertyNames()
getOwnPropertySymbols: ƒ getOwnPropertySymbols()
getPrototypeOf: ƒ getPrototypeOf()
is: ƒ is()
isExtensible: ƒ isExtensible()
isFrozen: ƒ isFrozen()
isSealed: ƒ isSealed()
keys: ƒ keys()
length: 1
name: "Object"
preventExtensions: ƒ preventExtensions()
prototype: {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
seal: ƒ seal()
setPrototypeOf: ƒ setPrototypeOf()
values: ƒ values()
__proto__: ƒ ()
[[Scopes]]: Scopes[0]
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()

1 Ответ

0 голосов
/ 04 августа 2020

Попробуйте добавить заголовок

header('Content-Type: application/json');

после

if (isset($_POST['action']) && $_POST['action'] == "add_attendance") {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...