Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.06.2016 16:15:56

Как избежать вызова ajax при редиректе

Здравствуйте.

Я передаю в контроллер через ajax скрипт 2 числа. Контроллер их считает и через ajax возвращает на страницу. Теперь появилась задача проверить эти числа на правила (rules). Когда валидатор выдает fails (пустое поле, например), то я делаю редирект (у меня одна единственная страница), передаю во вьюху $validator, чтобы вьюха вывела мои ошибки, но в консоли пишется следующее: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data (если я правильно понял, то это строка  var res = $.parseJSON(response); в коде). На самой странице не появляются тексты ошибок валидатора, но они прекрасно отображаются во вкладке "Сеть" (браузера Firefox). Когда fails нет, то все работает корректно.
Привожу коды:
ajax скрипт (script.blade.php)

 <script>
    function AjaxFormRequest(result_id, error_id) {
        $.ajax({
            url:      '{{ URL::to('calculate') }}', 
            type:     "POST", //Тип запроса
            dataType: "html", //Тип данных
            data: $("#aj").serialize(),
                
            success: function(response) { //Если все нормально
                var res = $.parseJSON(response);
                    
                if (res.error_code == 0) { //если ошибок нет
                    document.getElementById(result_id).innerHTML = $("#value1").val() + " + " + $("#value2").val() + " = " + res.result;
                } else { //если ошибки есть
                    document.getElementById(error_id).innerHTML = "Произошла ошибка при отправке формы";//res.message;
                    console.log("Неудача");
                } 
            },
            error: function(response) { //Если ошибка есть
                document.getElementById(error_id).innerHTML = "Произошла ошибка";
            }
        });
    }
</script>

Класс контроллер

class CalculateController extends Controller
{
	public function calculate(Request $request)
	{ 
		$calculator = new Calculator();

		$validator = Validator::make(Input::all(), $calculator->rules(), $calculator->messages());

		if ($validator->fails()) {
			return Redirect::to('/')->WithInput()->withErrors($validator);
		}

		$calculator->setValue1($request->input('value1'));
		$calculator->setValue2($request->input('value2'));

		$result = $calculator->calculate();

		return response()->json(['error_code' => '0', 'result' => $result]);
	}
}

И вьха main

@extends('layout')
@section('main')
//тут пошел html
@if ($errors->has())
	<p style="color:red;">
  		@foreach ($errors->all() as $error)
    		{!! $error !!}<br />		
  		@endforeach
	</p>
@endif

@stop

@section('scripts')
@include('script')
@stop

Буду признателен любой подсказке.

Изменено Tkas (22.06.2016 16:24:13)

Не в сети

#2 23.06.2016 09:59:29

Re: Как избежать вызова ajax при редиректе

Вы не сможете узнать в ответе на AJAX, был ли там редирект или нет — это поведение браузера, он сам идёт по редиректам, пока не найдёт ответ без редиректа (и вот этот ответ может иметь любой HTTP-код, не обязательно 200, и его можно поймать).

Не в сети

Подвал раздела