2016-02-28 135 views
1

我想通过一个表单加载一个模式并使用ajax(我使用Laravel 5.2)来上传文本和文件,我无法弄清楚为什么它不工作。我尝试了许多在这里和通过搜索引擎找到的解决方案。用ajax使用laravel提交表单

一种简单形式(这种形式在一个模态加载)

<form id="registerForm" enctype="multipart/form-data" class="form-horizontal" role="form" method="POST"> 


<div class="form-group"> 
<label class="col-md-4 control-label">Name</label> 
<div class="col-md-6"> 
<input type="text" class="form-control" name="name" id="name"> 

<div class="form-group"> 
<label class="control-label col-md-4" for="pwd">Choose File</label> 
<div class="col-md-6"> 
<input type="file" class="form-control" id="fileProfPic" name="prof_pic"> 
</div> 
</div> 

<button type="submit" id="registerButtonModal" class="btn btn-primary"><i class="fa fa-btn fa-user"></i>Register</button> 
</form> 

的.js

$("#registerButtonModal").click(function(){ 
    $('#registerForm').submit(function (e) { 
     e.preventDefault(); 
     var formData = new FormData($('#registerForm')[0]); 

     $.ajax({ 
      url: 'register', 
      type: 'POST', 
      data: formData, 
      success: function(msg){ 
       alert(msg); 
      } 
      contentType: false, 
      processData: false 

     }); 
     }); 
}); 

路线

Route::post('register',[ 
     'uses' => '[email protected]', 
     'as' => 'postRegister']); 

控制器//只是试图让它工作

public function postRegister(Request $request) 
    { 
     return "success"; 
    } 
+0

“犯规的工作”不帮助我们理解您的问题 –

+0

好,如果我知道什么造成的问题,我会告诉,但在这种情况下,我的控制器根本不会被调用。 – Jason

+2

使用chrome,按f12切换到网络标签页,提交表格,看看你得到的错误 –

回答

0

你的问题可能是由于您的AJAX应该返回与控制器的JSON响应的事实。

尝试以下操作:

public function postRegister(Request $request) 
    { 
     return response()->json(['success' => 'success']); 
    } 

通过以上你现在有你自己的视图中的对象的访问。

另外,请记住在您的AJAX中传递您的CSRF令牌。当我使用AJAX和我传递变量数据,如下图所示,我通常在我看来,补充一点:

<script> 
    var token = '{{ Session::token() }}'; 
</script> 

$.ajax({ 
     url: 'register', 
     type: 'POST', 
     data: {variable1: variable1, variable2: variable2, _token: token},, 
     success: function(msg){ 
      alert(msg); 
     } 
     contentType: false, 
     processData: false 

    });