У меня есть код ajax, который работает, только если я выбираю опцию для всех выборов.
Выпуск
Select box 1 (option selected)
Select Box 2 (option selected)
Select Box 3 (option didn't select)
result: code 500 (won't send data)
//////////////////////
Select Box 1 (option selected)
Select Box 2 (option selected)
Select Box 3 (option selected)
result: code 200 (sending data)
Код
<script defer>
$(document).ready(function() {
$('body').on("change", ".autosubspecifications", function() {
var form = $(this).closest('form');
var id = form.find('input[name="product_id"]').val();
// An array to store the subspecifications values.
var spec_array = [];
// A loop to go through all them.
form.find('select.autosubspecifications option:selected').each(function(){
spec_array.push($(this).val());
});
console.log(id);
$.ajax({
type: "post",
url: '{{ url('admin/spacssendto') }}',
data: {
'_token': $('input[name=_token]').val(),
'product_id': id,
'subspecifications': spec_array,
},
success: function (data) {
alert('Specifications added successfully.');
console.log($(this));
},
error: function (data) {
console.log(data);
}
});
});
});
</script>
Что я хочу
Нужно ли отправлять данные в том виде, в котором они были выбраны, если я выбираю опции для двух или даже в одном из полей выбора, получаю код 200, чтобы не заставлять выбирать значения для всех моих выборов.
Есть идеи?
Обновление
вот мой бэкэнд (контроллер)
public function spacssendto(Request $request)
{
$this->validate($request, array(
'product_id' => 'required',
'subspecifications' => 'required',
));
$product = Product::find($request->product_id);
$product->subspecifications()->sync($request->subspecifications, false);
}
Метод синхронизации
Что делает мой метод синхронизации,должен хранить product_id
и subspecification_id
в таблице с именем product_subspecification
database
how data are passing currently
Ошибка
как ответ моей сети (когда я не выбираю опцию из всех моих окон выбора), я получаю:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`u641790295_kargr`.`product_subspecification`, CONSTRAINT `product_subspecification_subspecification_id_foreign` FOREIGN KEY (`subspecification_id`) REFERENCES `subspecifications` (`id`)) (SQL: insert into `product_subspecification` (`product_id`, `subspecification_id`) values (21, ))
Обновление 2
Я внес некоторые изменения для того, чтобы игнорировать пустые значения подвидов и избежать ошибки в серверной части, вот мой текущий код:
public function spacssendto(Request $request) {
$this->validate($request, array(
'product_id' => 'required',
'subspecifications' => 'required',
));
$product = Product::find($request->product_id);
$looped = $request->subspecifications;
$spec = [];
foreach($looped as $loope){
if($loope != ''){
$spec[] = $loope;
}
}
if(isset($spec)) {
$product->subspecifications()->sync($spec, false);
}
}
таким образом я получаю только те элементы массива, которые имеют значения(изображение № 2 выше).
Пока все хорошо,
Проблема возникает, когда я заменяю один из моих предыдущих вариантов, и, кроме редактирования, он добавляется.
sample
Любая идея, как я могу сделать эту замену?
PS: метод синхронизации по умолчанию делает эту замену, но так как яУ меня проблема с пустыми значениями и при условии, что если в моем контроллере теперь я потерял возможность замены синхронизации.