Запрос почты Ajax возвращает успех, но не вставляет в базу данных - PullRequest
0 голосов
/ 14 мая 2019

Я работаю над системой тикетов, используя laravel 5.8 и ajax. Проблема в; Каждый раз, когда пользователь нажимает «отправить заявку», ajax отображает сообщение в «успехе», но данные формы никогда не вставляются в базу данных.

Пожалуйста, как я могу решить эту проблему?

Ниже мой код.

Контроллер Laravel:

public function  postCreateTicket (Request $request)
    {
        $validate = $this->validate($request, [
            'subject' => 'required',
            'message' => 'required'
        ]);

        if ($validate)
        {
            $new_message = TicketMessage::create([
                'ticket_subject_id'  => $request->subject,
                'investor_id' => $request->$this->investorID(), 
                'message'     => $request->message,
            ]);

            $send_status = $new_message->save();
            if($send_status)
            {
                $message = 'Your ticket was successfully sent! We will get back to you in no time.';
                return response()->json($message);
            }else{
                echo 'Error1';
            }
        }
    }

HTML-код:

<form method="post" id="form-data">
                            @csrf()
                                <div class="form-group text-left x3-margin-top">
                                    <label for="subject" class="grey normal x4-margin-left">Subject</label>
                                    <select name="subject" id="subject" class="form-control input-lg x4-margin-left x9-width no-radius input grey">
                                        <option value="" selected>Select Subject</option>
                                        @foreach($ticket_subject as $ticket_subjects)
                                            <option value="{{$ticket_subjects->id}}">{{strtoupper($ticket_subjects->subject)}}</option>
                                        @endforeach
                                    </select>
                                    @if($errors->has('subject'))
                                        <span class=" x4-margin-left x10-font-size maroon">{{$errors->first('subject')}}</span>
                                    @endif
                                </div>

                                <div class="form-group text-left x3-margin-top">
                                    <label for="message" id="message-label" class="grey normal x4-margin-left">Message</label>
                                    <textarea name="message" id="message" cols="30" rows="15" class="form-control x4-margin-left x9-width"></textarea>
                                    @if($errors->has('message'))
                                        <span class="x4-margin-left x10-font-size maroon">{{$errors->first('message')}} </span>
                                    @endif
                                </div>
                                <div class="form-group text-right x4-margin-top x6-margin-right">
                                    <button class="btn btn-info btn-lg no-radius" id="submit" type="button">
                                        Send Ticket <i class="fas fa-mail-bulk"></i>
                                    </button>
                                </div>
                            </form>

Код Ajax:

<script type="text/javascript">
                        $(document).on('click', '#submit', function (e){
                            $.ajax({
                                    type:'POST',
                                    url : "{{route('ticket')}}",
                                    data  : {
                                        _token: "{{csrf_token()}}",
                                        ticket_subject_id: $('select[name=subject]').val(),
                                        investor_id: "{{Auth::user()->investor_id}}",
                                        message: $('textarea[name=message]').val()
                                    },
                                    dataType: 'text',
                                    beforeSend: function(){$('#message-label').text('Sending..')},
                                    success : function(data)
                                    {
                                      $('#message-label').text('Sent!');
                                      $('.subject').text('');
                                      $('.message').text('');
                                    },
                                    errors : function(data)
                                    {
                                        alert('failed');
                                    }

                                });
                        });
                    </script>

Маршрут:

Route::get('/investor/dashboard/ticket/create/', array(
        'as'   => 'ticket',
        'uses' => 'InvestorTicketController@getCreateTicket'
    ));

    Route::post('/investor/dashboard/ticket/create/', [
        'as'   => 'ticket',
        'uses' => 'InvestorTicketController@postCreateTicket'
    ]);

1 Ответ

0 голосов
/ 14 мая 2019

Обновите вашу модель

<?php namespace App; 

use Illuminate\Database\Eloquent\Model; 

class TicketMessage extends Model {
    protected $fillable = [
        'ticket_subject_id',
        'investor_id',
        'message'
    ];

    public function ticket_subject () { 
        return $this->belongsTo('App\TicketSubject', 'ticket_subject_id'); 
    } 

    public function ticket_response () { 
        return $this->hasMany('App\TicketResponse'); 
    } 
}

Вы должны вставить все свои поля protected $fillable массив.

Я могу предложить лучшую функцию

public function  postCreateTicket (Request $request)
{
    try {
        // Validate stop the execution is fields are empty
        $validate = $this->validate($request, [
            'ticket_subject_id' => 'required',
            'message' => 'required'
        ]);

        $new_message = TicketMessage::create([
            'ticket_subject_id' => $request->ticket_subject_id,
            'investor_id' => Auth::user()->investor_id,
            'message' => $request->message,
        ]);

        if (!empty($new_message)){
            $message = 'Your ticket was successfully sent! We will get back to you in no time.';
            return response()->json(['message' => $message]);
        }else{
            return response()->json([
                "error" => "Ticket message didn't create",
            ]);
        }

    }catch (\Exception $e) {

        // If there is any error it return a error response
        return response()->json([
            "error" => $e->getMessage(),
        ]);
    }
}

Код Ajax

jQuery.ajax({
        url: "{{route('ticket')}}",
        headers: {'X-CSRF-TOKEN': "{{csrf_token()}}"},
        type: 'POST',
        dataType: 'json',
        data: { ticket_subject_id: $('#subject').val(),
            message: $('#message').val()
        },
        beforeSend: function(){$('#message-label').text('Sending..')},
        success: function(data){
            alert(data.message);
            $('#message-label').text('Sent!');
            $('#subject').val('');
            $('#message').val('');

        },
        error: function(e) {
            alert('failed');
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...