如何访问laravel 5中从jquery ajax发送的数组?

时间:2018-01-07 09:35:44

标签: jquery ajax laravel laravel-5

在我的jquery ajax请求中

$('#form').on('submit', function (e) {

            e.preventDefault();

            $.ajax({
                type: "POST",
                url: "/ajaxpage",
                data:{
                    selected_data: JSON.stringify(selected_data),
                    },
                dataType : 'json',
                success: function( data ) {

                    console.log(data);

                }
            });

        });

在我的控制器方法中我试图通过像这样的循环来访问我从ajax发送的数组

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;

class AjaxController extends Controller
{

    public function postData(Request $request)
    {
        foreach ($request['selected_data'] as $data => $value)
        {
           $user->roles()->attach(role->id, ['pivot_colmumn' => $value]);
        }
    }
}

我认为这不是一个正确的方法。对于单个变量,我使用$request['var_name']并且它可以工作但是对于数组它给出了500 internal server error.那么我是否可以访问数组值?

6 个答案:

答案 0 :(得分:3)

您应该解码从控制器中的ajax请求发送的json!

$select_data = json_decode($request->get('select_data'));
foreach($select_data as $key => $value){}

答案 1 :(得分:0)

您可以通过为ajax设置添加令牌来修复:

除了检查CSRF令牌作为POST参数之外,VerifyCsrfToken中间件还将检查X-CSRF-TOKEN请求头。例如,您可以将令牌存储在HTML元标记中:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后,一旦创建了元标记,就可以指示像jQuery这样的库自动将标记添加到所有请求标头中。这为基于AJAX的应用程序提供了简单,方便的CSRF保护:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

https://laravel.com/docs/5.5/csrf

答案 2 :(得分:0)

我实际上在JSON.stringify(selected_data)请求中使用jquery ajax post实际上将其转换为字符串。

所以我需要使用json_decode()来获取一个数组然后我可以像往常一样循环遍历它。

答案 3 :(得分:0)

要访问从ajax请求发送并将其转换为数组的数据,您可以在控制器中执行以下操作:

foreach(json_decode($request->selected_data) as $data)
{
    dd($data)
}

答案 4 :(得分:0)

你的意思是$request->var_name$request->all()

Laravel请求返回集合

答案 5 :(得分:0)

当请求对象是对象时,您尝试将请求对象作为数组进行访问。而不是使用[]使用 - &gt;。