Использование Ajax и возврат массива json в laravel 5

введите здесь описание изображенияЯ новичок в "AJAX" и пытался отправить запрос "ONSELECT", используя «AJAX» и получите ответ «JSON» в «laravel 5».

Вот мой взгляд

<select>
<option data-id="a" value="a">a</option>
<option data-id="b" value="b">b</option>
<option data-id="c" value="c">c</option>
</select>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<script type="text/javascript">
$('select').change(function(){
var data = $(this).children('option:selected').data('id');

$.ajax({
    type    :"POST",
    url     :"http://localhost/laravel/public/form-data",
    dataType:"html",
    data    :{ data1:data },

    success :function(response)
    alert("thank u");
    }),
});
</script>

Вот мой контроллер для получения запроса ajax

public function formdata(){
    $data = Input::get('data1');

    //somecodes

    return Response::json(array(
                    'success' => true,
                    'data'   => $data
                )); 
}

Вот мой маршрут

 Route::post('form-data',array('as'=>'form-data','uses'=>'FormController@formdata'));

Я также пытался изменить URL-адрес ajax только с помощью form-data и {{Url::route('form-data')}}.


person sujit prasad    schedule 19.02.2015    source источник
comment
Здравствуйте, Прасад, какую ошибку вы получаете?   -  person Pratik    schedule 19.02.2015
comment
Ошибок нет, но код просто не работает   -  person sujit prasad    schedule 19.02.2015
comment
также в laravel 5 синтаксис должен измениться, это основная причина   -  person sujit prasad    schedule 20.02.2015


Ответы (6)


Laravel 5 использует проверку токена csrf из соображений безопасности.... попробуйте это...

  1. В маршрутах.php

    route post('form-data', 'FormController@postform');
    
  2. В основном файле макета

    <meta name="csrf-token" content="{{ csrf_token() }}" />
    
  3. var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
    $.ajax({
        url: '/form-data/',
        type: 'POST',
        data: {_token: CSRF_TOKEN},
        dataType: 'JSON',
        success: function (data) {
            console.log(data);
        }
    });
    
person sunil sah    schedule 22.04.2015

Добавьте обратный вызов ошибки в свой запрос ajax, чтобы узнать, возникает ли ошибка,

$.ajax({
  type    :"POST",
  url     :"http://localhost/laravel/public/form-data",
  dataType:"json",
  data    :{ data1:data },
  success :function(response) {
    alert("thank u");
  },
  error: function(e) {
    console.log(e.responseText);
  }
});

лучше использовать console.log() для просмотра подробной информации, даже если ответ представляет собой строку json. Попробуйте код и сообщите нам, если что-то регистрируется в консоли браузера.

person Ashik Basheer    schedule 19.02.2015
comment
все еще бесполезно, но это также касается laravel 5, где также меняется некоторый синтаксис, и он был выпущен почти 10 дней назад. - person sujit prasad; 19.02.2015
comment
какой ответ вы получаете от контроллера? - person Ashik Basheer; 19.02.2015
comment
Я пытаюсь получить ответ json, но в этой функции ответ при выполнении не возвращается. Я просто хочу получить ответ об успехе, но в json - person sujit prasad; 19.02.2015
comment
Спасибо. Я боролся с этой частью: error: function(e) { console.log(e.responseText); } - person Leonardo; 11.04.2019

В вашем коде jQuery есть синтаксическая ошибка в обратном вызове success, поэтому он не делает никаких запросов post к Laravel, попробуйте ниже javascript, он будет работать

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<select>
<option data-id="a" value="a">a</option>
<option data-id="b" value="b">b</option>
<option data-id="c" value="c">c</option>
</select>

<script type="text/javascript">
 $(function () {
   	$('select').on('change', function (e) {
 		var data = $(this).children('option:selected').data('id');
	$.ajax({
		type    :"POST",
    	dataType:"json",
		url     :"http://localhost/laravel/public/form-data",
		data    :{ data1:data },
		success :function(response) {
				alert("thank u");
		}
	});
});
})
</script>

В Laravel вы можете просто вернуть array или object, и он автоматически преобразует его в ответ json.

return ['success' => true, 'data' => $data];
person Saqueib    schedule 19.02.2015
comment
попробуйте запустить php artisan route:list и убедитесь, что маршрут http://localhost/laravel/public/form-data зарегистрирован, используйте приведенный выше код, он будет работать - person Saqueib; 19.02.2015

Вы допустили ошибку в коде, пожалуйста, напишите ее правильно.

$.ajax({
    type    :"POST",
    url     :"http://localhost/laravel/public/form-data",
    dataType:"json",
    data    :{ data1:data },
    success :function(response){
    alert("thank u");
    }
});

Обновить

Я только что увидел, что ваш возвращаемый тип данных - json , поэтому используйте

 dataType:"json",

or

 dataType:"jsonp",
person Pratik    schedule 19.02.2015
comment
если я добавлю предупреждение после данных var, оно работает как предупреждение перед ajax, но после ajax нет ответа - person sujit prasad; 19.02.2015
comment
откройте Firebug и откройте в нем вкладку Net. И отредактируйте вопрос, вставьте скриншот вызова ajax. - person Pratik; 19.02.2015

Проблема заключалась в том, что тип должен быть «GET» вместо «POST» и

route get('form-data', 'FormController@postform');

Спасибо всем за вашу помощь

person sujit prasad    schedule 19.02.2015
comment
Отлично, но изменение метода запроса только потому, что что-то не работает, не является хорошим решением. Вы можете проверить консоль, чтобы отследить ошибку для почтового запроса, если вам нужно учиться. Ваше здоровье :) - person Ashik Basheer; 19.02.2015

Лучше, если вы отправляете все данные формы, используйте data: $(this).serialize() в ajax, а внутри формы используйте {{ csrf_field() }}

person Vipin    schedule 20.09.2016