Ajax триггеры отправки Error = True по умолчанию даже при успехе - PullRequest
1 голос
/ 03 февраля 2020

Laravel ajax представление.

$.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });            
        $.ajax({
            url : '{{URL::to('expense_bill/store2')}}',
            method: 'POST',
            data: $("#expense_create").serialize(),
            success:function(data){
                console.log(data)
                if(data['success'] = true){ 

                }
                if(data['error'] = true){ 
                    //Clear Valdiation Errors
                    console.log('hi');
                }                
            },
            error: function (xhr) {
               $('#validation-errors').html('');
               $.each(xhr.responseJSON.errors, function(key,value) {
               $('#validation-errors').append('<div class="alert alert-danger">'+value+'</div');
                }); 
            },
        }); 
    });

Контроллер:

public function store2(Request $request)
    {                
        if($request->ajax()){    
            //return response()->json($request);        
            $validator = Validator::make($request->all(), [
               'supplier' => 'required',               
            ]);                        
            if ($validator->fails()) {                   
                $returnArray['error']=true;
                $returnArray['err_msg']=json_decode(json_encode($validator->errors()), true);
                return $returnArray; 
            }
            if ($validator->passes()) { 
                $request->merge(['total' => $request->total*100]);
                $request->merge(['tax_value' => $request->tax_value*100]);
                $expensebillheader = ExpenseBillHeader::create($request->all());
                $expense_bill_no = $expensebillheader->id;
                $count = $request->input('count');
                for ($i = 0; $i <= $count; $i++){
                    //checks if input with this name exists (incase if any middle row was deleted)
                    if (isset($request->input('amount')[$i]))
                    {
                    $line = new ExpenseBillBody;
                    $line->bill_no = $expense_bill_no;
                    $line->description = $request->input('description')[$i];
                    $line->amount = $request->input('amount')[$i];
                    $line->account = $request->input('account')[$i];
                    $line->save();
                    }
                };
            $successArray = ['success'=>'true','msg'=>"Expnese No".$expense_bill_no." Created"];
                return response()->json($successArray);                                 
            }            
        }     
    } 

Когда сбой валидатора, все нормально. Когда валидатор проходит, он должен дать сообщение success = "true". Но наряду с этим он также выдает error = "true". Не уверен, что я делаю не так. Смотрите на скриншоте, выделенная часть не должна прийти.

enter image description here

1 Ответ

2 голосов
/ 03 февраля 2020

Larave возвращает правильный ответ. У вас есть ошибка здесь

success:function(data){
    console.log(data)
    if(data['success'] = true){ 

    }
    if(data['error'] = true){ 
        //Clear Valdiation Errors
        console.log('hi');
    }                
}
...

if(data['success'] = true) и if(data['success'] = true) не сравнение, это присваивание значений

Попробуйте написать операторы сравнения ==

success:function(data){
    console.log(data)
    if(data['success'] === true){ 

    }
    if(data['error'] === true){ 
        //Clear Valdiation Errors
        console.log('hi');
    }                
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...