我在laravel中遇到问题,将多个输入选项(由foreach循环构建)发送到ajax调用中,以便我可以发送多个值并在ajax调用中循环它们,以便正确地将它们发送到控制器。我需要为每个属性集调用一个存储过程,以便如果它们选择3个选项,ajax调用将全部发送给它们,并且我将为这些值调用该存储过程3次。
刀片:
@foreach($getRuleAttributes as $attributes)
<tr>
<td><input type="checkbox"></td>
<td><label>{{ $attributes->title }}</label></td>
<td><input type="text" class="attribute_data"></td>
<input type="hidden" class="attribute_id" value="{{ $attributes->attributet_id }}">
<input type="hidden" class="attribute_type" value="promo_codes">
</tr>
@endforeach
这提供一个输入,然后提供带有复选框的多个选项,可以选择多个
刀片的邻近部分:
$("#savePromoCode").click(function(e){
e.preventDefault();
/********************************/
/*This is where the issue starts*/
var attr_title
var attr_type_name
var attr_value
/*******************************/
$.ajax({
type:'POST',
url:'postData',
data:{rule_name:rule_name, attr_title:attr_title, attr_type_name:attr_type_name, attr_value:attr_value},
_token: '{{ csrf_token() }}'
});
});
Controller.php
public function postContent(Request $request)
{
$attr_title = $request->attr_title;
$attr_type_name = $request->attr_type_name;
$attr_value = $request->attr_value;
$callProcedure = new procedureService();
$ruleSave = $callProcedure->saveFunction($attr_title,$attr_type_name,$attr_value);
}
我在这里的主要问题是,如果我有多个attr_title,attr_type_name和attr_value,那么我将如何在我的Ajax调用和控制器中进行协调?变量是由php foreach构建的,因此,如果它们选择其中的3个,那么我将需要ajax调用来发送所有三个变量,并且控制器将调用存储过程3次,以便将它们全部插入。
我该怎么做?
答案 0 :(得分:1)
您需要发送一个值数组,而不是逐行发送它。
尝试将数据编译为一个数组
$("#savePromoCode").click(function(e){
e.preventDefault();
/********************************/
/*This is where the issue starts*/
var attributes = [];
... //foreach there
var item = {
title = YOUR_TITLE,
type_name = YOUR_TYPE_NAME,
value = YOUR_TYPE_VALUE
};
attributes[] = item;
/*******************************/
$.ajax({
type:'POST',
url:'postData',
data:{rule_name:rule_name, attributes:attributes},
_token: '{{ csrf_token() }}'
});
});
然后在您的控制器中
$callProcedure = new procedureService();
foreach ($request->input('attributes') as $attribute){
$callProcedure->saveFunction(
$attribute['title'],
$attribute['type_name'],
$attribute['value']
);
}
答案 1 :(得分:1)
将名称属性更改为数组[]。表单就像
<form id="form">
<?php $i = 1; ?>
@foreach($getRuleAttributes as $attributes)
<tr>
<td><input type="checkbox" name="attribute[{{$i}}]['checked']"></td>
<input type="text" name="attribute[{{$i}}]['attribute_title']" value="{{ $attributes->title }}">
<input type="text" name="attribute[{{$i}}]['attributet_id']" value="{{ $attributes->attributet_id }}">
<input type="text" name="attribute[{{$i}}]['attribute_type']" value="attribute_type1">
</tr>
<?php $i++; ?>
@endforeach
<input type="submit" value="submit" id="savePromoCode">
jQuery代码
<script>
$(document).ready(function(){
$("#savePromoCode").click(function(e){
e.preventDefault();
//using serialize send the from data to ajax request file
var form_data = jQuery("#form").serialize();
$.ajax({
type:'POST',
url:'postData',
data:{form_data:form_data,
_token: '{{ csrf_token() }}'
}
});
});
});
</script>
在使用parse_str的控制器中,获取数组中的序列化值。
public function postContent(Request $request){
$form_data = $request->form_data;
parse_str($form_data, $my_array_of_vars);
$attr = $my_array_of_vars['attribute'];
/*echo "<pre>";
print_r($attr);*/
foreach($attr as $key=>$value){
//get the value of checked row - attribute_title, attributet_id, attribute_type, Confirm what attr you need use that one
if(isset($value["'checked'"]) && $value["'checked'"] != ''){
echo $attribute_title = $value["'attribute_title'"];
echo $attributet_id1 = $value["'attributet_id'"];
echo $attribute_type1 = $value["'attribute_type'"];
$callProcedure = new procedureService();
}
}
}