繁体   English   中英

如何在AJAX请求后使用数据库信息填充视图

[英]How to populate view with database information after AJAX request

您好,再一次,SO社区。 我一直在开发一个网站,到目前为止一切进展顺利。 但是今天经过漫长的一天寻找解决方案后,我无法理解也找不到正确的道路...

我想单击一个按钮,然后会出现一个可在其中编辑字段的配置文件页面。 我可以重定向到所需的页面,但是我不知道如何发送用户数据,因此无法填充字段。

这是我视图中的按钮代码

<button class="btn btn-xs btn-warning dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false" style="border-color: black" id="dados_{{ $user->username }}"> Alterar Dados Pessoais

<i class="glyphicon glyphicon-cog"></i>

</button>

这是按钮AJAX请求处理程序

if((this.id).indexOf("dados") != -1){

    var content = this.id.replace("dados_", "");

    $.get('callPermissions', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){

    window.location.replace('settings');

});

这是我的callPermission控制器

public function callPermissions(Request $request)
{

  if($request->ajax()){

    $usernames = Input::get('usernameSend');

    if(isset($usernames)){

      $user = User::Where('username', '=', $usernames)->first();

      $returnHTML =  view('userOptions.settings')->render();

      return view('userOptions.settings');

    }else{

      Log::warning("Username não existe na base de dados.");

    }

  }

}

这是我的设置控制器

public function settings(Request $request)
{

    return view('userOptions.settings');

}

这是路线

Route::get('/callPermissions', 'SidebarController@callPermissions');

我知道控制器是错误的,从我读到的内容来看,我应该验证AJAX是否成功以及是否在AJAX请求中处理过我。 但是据我了解,我根本没有使用Controller(即使它在那里)。 我应该如何发送用户信息(在本例中为用户名,然后可以从数据库中获取所有信息),然后将其发送到视图? 我一直在搜索并尝试一些不起作用的东西,因为Controller上的return view(“ your_view”)不起作用。

抱歉,如果我一直感到困惑,是否需要其他信息,请随时提问!

谢谢你的帮助!!

编辑 :如果我在控制器上返回此

return view('userOptions.settings', compact('user'));

并用上面的Ajax请求进行替换,并将其添加到设置视图中

<p> {{ $user->name }} </p>

我收到以下错误未定义变量:用户(视图:C:\\ wamp64 \\ www \\ siteXL \\ ideiasxl \\ resources \\ views \\ userOptions \\ settings.blade.php)

无论如何,还是用紧凑的方式发送参数,还是我需要通过链接发送参数? 避免在网址上显示用户名。

编辑2:为进一步说明,这按预期工作

<button onclick="window.location='{{url('/settings/' . $user->username)}}'" type="button" id="dadosPessoais" class="btn btn-default">Alterar Dados Pessoais

<i class="glyphicon glyphicon-wrench"></i>

</button> 

但我尝试不通过URL发送ID和用户名。

如果无法实现,那是可以的,但是如果我找不到方法,那就是为什么我要问

我认为您必须在Route中添加一个参数并在controller函数中接收数据。 我会做这样的事情:

路线:

Route::get('/callPermissions/{user}', 'SidebarController@callPermissions');

控制器:

public function callPermissions(Request $request, $user)
{
//get data related to $user
}

Ajax呼叫:

$.get('callPermissions/'+userIdVariable, {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){

    window.location.replace('settings');

});

这将通过路由发送用户ID。

要使用JavaScript获取用户ID,您可以在Blade文件中创建一个隐藏字段,并将用户ID设置为值。 例如,如果您使用表单助手:

{{ Form::hidden('user_id', $user->id, array('id' => 'js-user-id')) }}

然后,在JavaScript中,您可以使用类似以下内容的值:

var userIdVariable = $('#js-user-id')->val();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM