在我的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.
那么我是否可以访问数组值?
答案 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')
}
});
答案 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;。