Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
При отправке формы аяксом, отправляется сама форма,а я хочу что бы вернулся json и отобразились ошибки. В чем проблема?
<script type="text/javascript">
$('#form').on('submit', function() {
var form = $("#form");
$.ajax({
url : form.attr("action"),
type : form.attr("method"),
data : form,
dataType: 'json',
success: function(){
},
error :function( errors ) {
alert += "<div class='alert alert-danger'><ul>";
$.each(errors, function(index, error){
alert += "<li> + error + </li>";
});
alert += "</ul></div>";
$('#append').html(alert);
console.log(errors);
}
})
})
</script>
Аякс*
Вопрос задал не корректно.
Форма отправляется аяксом. Json возвращается, но всеравно произходит редирект, как при обычной отправке формы. Подозреваю, что валидатор отправляет не правильный хедер, сделал в валидаторе проверку
if($request->ajax() || $request->wantJson())
{
// Тут отправка json
}
Изменено BMTH (19.06.2016 13:00:32)
Не в сети
Покажите что в контроллере, для success должно быть что-то вроде
public function postCreate(Create $request) {
//действия в котроллере
return response()->json([
'message' => 'Ok',
]);
}
Для error — если вы используете стандартный подход в Laravel с Requests, при правильном ajax-запросе должны получить Status Code:422 и json с ошибками
Не в сети
}%Покажите что в контроллере, для success должно быть что-то вроде
%%(php)
public function postCreate(Create $request) {
//действия в котроллере
return response()->json([
'message' => 'Ok',
]);
}
%%
Для error - если вы используете стандартный подход в Laravel с Requests, при правильном ajax-запросе должны получить Status Code:422 и json с ошибками
Почти все получилось, методом проб и ошибок. Но теперь почимуто не происходит редирект после успешного добавления в базу.
<script type="text/javascript">
$('#form').on('submit', function(e) {
e.preventDefault();
var form = $("#form");
var formData = {
'meta_title': $('input[name=meta_title]').val(),
'meta_description': $('input[name=meta_description]').val(),
'meta_keywords': $('input[name=meta_keywords]').val(),
'name' : $('input[name=name]').val(),
'slug' : $('input[name=slug]').val()
};
$.ajax({
url : form.attr("action"),
type : form.attr("method"),
data : formData,
dataType: 'json',
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
error :function( errors ) {
output = "<div class='alert alert-danger'><ul>";
$.each(errors.responseJSON, function(index, error){
output += "<li>" + error + "</li>";
});
output += "</ul></div>";
$('#append').html(output);
console.log(errors);
},
success: function(data){
output = "<div class='alert alert-success'><ul>";
$.each(data.responseJSON, function(index, success){
output += "<li>" + success + "</li>";
});
output += "</ul></div>";
$('#append').html(output);
console.log(data);
window.location = '{{ url('user') }}';
}
})
})
</script>
Даже если саксесс функция будит пустая,а в валидаторе возвращать буду редирект, всеравно он не происходит почему то.
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|unique:catalogs',
'slug' => 'required'
]);
if($validator->fails())
{
return response()->json($validator->messages(), 422);
}
User::create($request->all());
return response()->json(['success' => 'Все успешно добавлено. Вы будите перенаправлены!'], 422);
}
Вот что в консоле
jquery.min.js:4 POST http://test.app/user 422 (Unprocessable Entity)send @ jquery.min.js:4ajax @ jquery.min.js:4(anonymous function) @ create:217dispatch @ jquery.min.js:3r.handle @ jquery.min.js:3
create:232 Object {readyState: 4, responseText: "{"success":"\u0412\u0441\u0435 \u0443\u0441\u043f\…043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b!"}", responseJSON: Object, status: 422, statusText: "Unprocessable Entity"}
И почему то, сообщение об успешного добавления высвечивается в денджер алерте
Изменено BMTH (20.06.2016 09:29:57)
Не в сети
Не в сети
}%Вы при success возвращаете Status Code:422, нужно 200.
Все заработало теперь. Спасибо)
Есть еще 1 вопрос. Я пытаюсь так же загрузить картинки на аяксе, тк у меня отдельная таблица картинок для всех моделей. Вроде все нормально, но картинки не загружаются почему то, и ошибок нет, в консоле пусто
$('#img').on('change',function(){
var image = $(this).val();
$.ajax({
url: '{{ url('api/img/upload') }}',
type: 'post',
data: image,
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
success: function(data){
console.log(data);
},
error: function(error){
console.log(error);
}
});
})
Код контроллера
public function uploadImg(Request $request)
{
if($request->hasFile('img'))
{
$image = $request->input('img');
$filename = str_replace('-','_',rand(111,99999) . '_' . strtolower(str_random(5)) . '.' . $image->getClientOriginalExtension());
$path = public_path('upload/img/' . $filename);
Img::make($image->getRealPath())->save($path);
if($filename)
{
$upload_img = new Image();
$upload_img->url = '/upload/img/' . $filename;
$upload_img->save();
return response()->json($filename);
}
}
}
Не в сети
Не в сети
}%В форме enctype="multipart/form-data" прописан?
Да, я уже все перепроверял...
Не в сети
$('#img').on('change',function(){ var form = document.forms.form; var formData = new FormData(form); $.ajax({ url: '{{ url('api/img/upload') }}', type: 'post', data: formData, headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }, success: function(data){ console.log(data); }, error: function(error){ console.log(error); } }); })
Не в сети
Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?
Не в сети
Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?
Думаю Вам поможет это https://laravel.ru/docs/v5/eloquent-relationships. Если я правильно понял, у Вас как-то модель изображений должна быть связана с другими моделями, которые будут использовать изображения. В выше приведенном разделе документации указан самый удобный способ (способы).
Не в сети
BMTH пишет:Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?Думаю Вам поможет это https://laravel.ru/docs/v5/eloquent-relationships. Если я правильно понял, у Вас как-то модель изображений должна быть связана с другими моделями, которые будут использовать изображения. В выше приведенном разделе документации указан самый удобный способ (способы).
Со связями проблем нет. Проблема в отправке значения input type file, которое не отправляется
Не в сети
max_kp пишет:BMTH пишет:Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?Думаю Вам поможет это https://laravel.ru/docs/v5/eloquent-relationships. Если я правильно понял, у Вас как-то модель изображений должна быть связана с другими моделями, которые будут использовать изображения. В выше приведенном разделе документации указан самый удобный способ (способы).
Со связями проблем нет. Проблема в отправке значения input type file, которое не отправляется
В документации загрузка файла на сервер описана вот так (смотрю версию 5.2):
$request->file('photo')->move($destinationPath);
$request->file('photo')->move($destinationPath, $fileName);
У Вас в методе public function uploadImg(Request $request) этого нет. Получается Вы не загружаете сам файл на сервер в каталог.
Не в сети
И еще у Вас в коде $image = $request->input('img'); А нужно $image = $request->file('img');
Не в сети
Страницы 1