在响应中看不到POST数组

时间:2014-12-18 02:08:30

标签: php jquery arrays laravel checkbox

首先,我有一个复选框列表

@foreach ($extras as $extra)
    <span class="button-checkbox">
    <button type="button" class="btn" value="{{ $extra->id }}" data-color="primary">
         {{ $extra->name.' - $'.$extra->amount}}
    </button>
    <input type="checkbox" name="extras[]" id="extras" class="hidden" />
    </span>
@endforeach

这些按钮用作复选框。在幕后有JS获取按钮值并将其添加到兄弟复选框值并将其标记为已选中。我知道这是有效的,因为我可以看到我的控制台中的extras[]标记为已选中并列出,如果我运行$("[name='extras[]']").serializeArray()

我有一个函数将表单数据发送到控制器服务器端,它将对数据执行某些操作并发回一些内容。

function updateTotals() {
    var url = "/reservation/updateTotals";
    //set hidden field that holds the selected property's name
    //$('#property_name').val($('#properties').text().trim());
    $.post(url, $("form").serializeArray())
        .done(function(data) {
            //console.log(data);
        })
    .fail(function() {
        alert("Error updating totals.");
    })
    .always(function() {
        //alert( "finished" );
    });
}

我有一条链接到控制器的路线: Route::post('reservation/updateTotals', 'ReservationController@updateTotals');

现在我只是使用Controller测试来获取我的数组数据:

public function updateTotals() {
    //get property
    $property = Property::findOrFail(Input::get('property_id'));

    //get extras
    return $extras = $_POST['extras'];

    //get discount
    $discount = Input::get('discount');
}

当我return $_POST['extras']Input::get('extras')时,我的回复中没有任何内容。但是,如果我返回$_POSTInput::all(),我会收回所有**非数组* POST数据。 extras有一个字段,但该字段为空:,"extras":"",&lt; - 来自我的回复

我尝试一起取消按钮,只使用复选框,仍然得到相同的结果。

我在这里缺少什么?可能是我的问题?

2 个答案:

答案 0 :(得分:1)

您将Extras定义为数组,没有值。换句话说,var Extras[];将声明一个数组,并为其指定值null;null;尝试将检查定义为vairbles,并将它们发送到Extras数组,它是更有效率和支持。

答案 1 :(得分:0)

我不确定为什么但是在发送到$.post()之前将我的序列化数组设置为var使一切正常(我的意思是extras数组在我的控制器中可见并可用,并且可以在响应中看到) 。我不明白为什么,但对我来说绝对是这样。

function updateTotals() {
    var data = $('form').serializeArray();
    var url = "/reservation/updateTotals";

    $.post(url, data)
        .done(function(data) {
            //do something
    })
    .fail(function() {
        alert("Error updating totals.");
    })
    .always(function() {
        //alert( "finished" );
    });
}