在响应中看不到 POST 数组

Posted

技术标签:

【中文标题】在响应中看不到 POST 数组【英文标题】:Cannot see POST array in response 【发布时间】:2015-02-16 17:48:27 【问题描述】:

首先我有一个复选框列表

@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 获取按钮值并将其添加到兄弟复选框值并将其标记为选中。我知道这是可行的,因为如果我运行$("[name='extras[]']").serializeArray(),我可以在控制台中看到extras[] 标记为选中并列出。

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

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() 我会取回我所有的 **non-array* POST 数据。 extras 有一个字段,但它是空白的:,"extras":"",

我已经尝试将按钮全部删除,只使用复选框,仍然得到相同的结果。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

将检查定义为变量?您的意思是 .each() 通过检查并从每个变量中创建一个变量并将其全部推送到数组中吗? @user2690363 这正是我的意思,我只是措辞奇怪。【参考方案2】:

我不知道为什么,但是在发送到 $.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" );
    );

【讨论】:

以上是关于在响应中看不到 POST 数组的主要内容,如果未能解决你的问题,请参考以下文章

在android中看不到来自php的JSON响应

IE 在响应中看不到 CORS 标头

在 Bootstrap 4 中看不到文本的响应式表格压缩表单字段

在 UIActivityViewController 中看不到提醒应用选项

在 TestFlight 中看不到构建

在 Pycharm 中看不到推送的提交