2017-02-10 75 views
1

我是Larvael的新手,我使用laravel 5.3。我想创建一个文本字段,它会自动提示一些数据,当我选择一个数据时,它会添加到数组中。我想发送那个arry到控制器进一步使用。为此,如何在laravel中使用ajax 5.3

视图文件如下:

<head> 
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
    <script> 
     $(document).ready(function() { 
      var members = {!! json_encode($member) !!}; 
      console.log(members); 
      var arr = []; 
      $("#tags").autocomplete({ 
       source: members, 
       select: function (event, ui) { 
        arr.push(ui); 
        console.log(arr); 
       } 
      }); 
      $("#submit").click(function(event){ 
       $.ajax({ 
        type: "POST", 
        url: '/storeresearch', 
        data: {selectedMembers: arr}, 
        success: function(msg) { 
         console.log(msg); 
        } 
       }); 
      }); 
     }); 
     </script> 
</head> 
<body> 
<form id="hu" action="/storeresearch" method="POST"> 
    {!! csrf_field() !!} 
    <label>Research Author</label> 
    <input type="text" id="tags" name="researchsupervisor_1" value=""> 
    <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Add"> 
</form> 
</body> 

我的控制器文件如下:

public function store(Request $request){ 
     if($request->ajax()) 
     { 
      $mem = $request->all(); 
      return response()->json($mem,200) ; 
     } 
     else{ 
      return "not found"; 
     } 

而且web.php是如下:

Route::post('/storeresearch','[email protected]'); 

但似乎没有ajax调用发生。在控制器中,它总是进入else部分。有什么问题可以帮助吗?

+0

变化''到'解决了这个问题'然后请尝试 –

+0

是的,它会触发ajax调用,但不会发生此操作。它仍然在同一页 –

+0

这就是阿贾克斯所代表的。当你处理ajax时,你的页面不会刷新。 –

回答

0

我通过执行以下

$.ajax({ 
       type:'POST', 
       url:'your url', 
       data:{_token: "{{ csrf_token() }}" 
       }, 
       success: function(msg) { 
       } 
      }); 
1

尝试一些事情是这样的:

$.ajax({ 
    url  : '/login', 
    method : 'post', 
    data : { 
     login_username : userName, 
     password  : password 
    }, 
    headers: 
    { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    }, 
    success : function(response){ 

    } 
}); 

路线:

Route::post('/login',[ 
    'uses' => '[email protected]' 
]); 

控制器的方法:

public function login() 
{ 
    $userName = INPUT::get('login_username'); 
    $password = INPUT::get('password'); 

    // your logic 
} 
+0

它仍然无法正常工作。 :( –

+0

在控制台中的任何错误? –

+0

没有没有错误 –

1

您的代码大多看起来不错。但是当您使用POST请求时,您错过了发送带有AJAX调用的csrf标记。

您可以通过这种方式与AJAX调用发送CSRF令牌:

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

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

更多信息:https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token

当你点击按钮,它真的触发AJAX调用?请检查浏览器的网络标签。

+0

我也试过,但没有改变。当我按下它不会触发任何ajax调用()。:( –

1

请求的名称空间声明是什么?

如果是use Illuminate\Http\Request;尝试use Request;

+0

我已经尝试过,但doesn也不行 –