У меня есть форма, которая открывается в веб-представлении Android, я хочу сохранить данные в базу данных, но когда я делаю вызов ajax и пытаюсь распечатать данные, отображается пустой массив, следующий мой код:
<div class = "card-body card-padding">
<form id = "submitdataform">
@csrf
@foreach($formfields as $key=>$value)
<input type = "hidden" name = "campaign_id" value = "{{$key}}"/>
@foreach($value as $attrkey)
<input type = "hidden" name = "attribute_id[]" value = "{{$attrkey->id}}"/>
<div class = "row">
<div class = "col-md-12">
<div class = "form-group">
<label class = "pure-material-textfield-outlined w-100">
{{--<input placeholder = " " type = "text" required>--}}
<?php
if ($attrkey->attribute_type == 'alpha') {
echo "<input placeholder=' ' type='text' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'date') {
echo "<input placeholder=' ' type='date' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'numberic') {
echo "<input placeholder=' ' type='number' name='attribute_value[]' required>";
}
?>
<span>{{$attrkey->attribute_name}}</span>
</label>
</div>
</div>
</div>
@endforeach
@endforeach
<button type = "button" id = "submitbtn">Submit</button>
</form>
</div>
Теперь вызов ajax
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "savecampaigndata",
data: {data: data},
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
И это метод контроллера, где я хочу получить все свои данные,
public function SaveCampaignData(Request $request)
{
return response()->json($request->all());
$data = $request->all();
$attribute_id = [];
$attribute_value = [];
$campaign_id = $data['campaign_id'];
$user_id = Auth::user()->id;
foreach ($data as $key => $value) {
if ($key == "attribute_id") {
foreach ($value as $attrkey) {
$attribute_id[] = $attrkey;
}
} else {
if ($key == "attribute_value") {
foreach ($value as $attrvalue) {
$attribute_value[] = $attrvalue;
}
}
}
}
$mainArray = array_combine($attribute_id, $attribute_value);
$currentdate = Carbon::now();
foreach ($mainArray as $key => $value) {
DB::table('campaign_attribute_values')->insert(
[
'campaign_id' => $campaign_id,
'campaign_attribute_id' => $key,
'user_id' => $user_id,
'campaign_attribute_value' => $value,
'created_at' => $currentdate,
'updated_at' => $currentdate,
]
);
}
if ($this->CheckSmsLimit() > 0) {
$this->checkAutoReply($campaign_id, $user_id);
}
return redirect()->back()->with('success', 'Request Registered');
// return response()->json(['status' => true, 'message' => 'Record saved succesfully', 'code' => 200]);
}
Это URL-адрес маршрута почтальона:
https://subdomain.xyz.com/savecampaigndata
Но он дает пустой массив в качестве вывода в моем контроллере.
@csrf уже добавлен, а также настроен ajax в моем файле приложения
удалить contentType: 'application/x-www-form-urlencoded', из запроса ajax
Я уже пробовал все эти вещи, но не могу отправить данные на контроллер
Одна важная вещь, которую этот файл представления открывает в ** веб-просмотре Android **
попробуйте консольный журнал об успехе и ошибке функции ответа, посмотрите, что он вам дает, посмотрите на код состояния http. Это 500? Это 404? Это 302? Это 200?
Sir@lessan Я звоню по этому адресу почтальоном
Можете ли вы попробовать назвать URL-адрес следующим образом: url: "/savecampaigndata",
да я тоже пробовал
Пожалуйста, не могли бы вы показать данные для $formfields?






Попробуйте добавить '/' в атрибут URL-адреса вызова ajax и добавить атрибут заголовка также в вызов ajax.
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "{{ url('savecampaigndata) }}",
data: {data: data},
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
тогда
app/Http/Middleware/VerifyCsrfToken.php
и добавьте URL-адрес этого маршрута в массив исключений
protected $except = [
'savecampaigndata'
];
затем добавить в голову
<meta name = "csrf-token" content = "{{ csrf_token() }}">
и в сценарии
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
}
});
Похоже, вы получаете пустой ответ из-за csrf. Я вижу, что вы включили его в свою форму, однако, поскольку вы используете serialize, он не будет работать так, как вы ожидаете.
Есть несколько разных способов добавить csrf:
Если ваш скрипт находится внутри вашего блейд-файла, вы можете просто добавить его в объект данных:
data: {
data: data,
_token: "{{ csrf_token() }}",
},
Или
в соответствии с документация вы можете добавить следующее внутри <head> вашей страницы:
<meta name = "csrf-token" content = "{{ csrf_token() }}">
а затем включил следующее после того, как вы подключили jQuery:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
}
});
Кажется, вы забыли добавить поле _token в форму, для csrf, или просто добавить этот маршрут в исключения, но это плохая практика.