Ajax调用和控制器功能中的多个循环值

时间:2019-07-19 14:30:31

标签: javascript php ajax laravel

我在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次,以便将它们全部插入。

我该怎么做?

2 个答案:

答案 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();
        }
    }
}