2016-02-28 37 views
1

我不能通过$ request-> ajax(),我可以得到和dd($ data),但它总是返回false,我的code.could有什么问题吗?任何人都可以帮助我吗?谢谢。如何使用laravel5 ajax后

路线
Route::post('test', '[email protected]'); 

视图
<form method="POST" id="form-ajax" action="/test"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
    <div class="form-group"> 
     <label for="name1">Name1</label> 
     <input type="text" class="form-control" name="name1" id="name1"> 
    </div> 
    <div class="form-group"> 
     <button type="submit" class="btn btn-primary" id="test_btn"> 
      Submit 
     </button> 
    </div> 
</form> 

控制器
public function test(Request $request) 
{ 
    $data = $request->input('name1'); 
    if ($request->ajax()) { 
     $response = array(
      'name' => $data, 
      'status' => 'success', 
     ); 
     return response()->json($response); 
    } else 
     return response()->json(['msg' => 'false']); 
} 

JS
$(document).ready(function() { 
      $('#test_btn').click(function() { 
       $.ajax({ 
        url: '/test', 
        type: 'post', 
        data: {'_token': $('input[name=_token]').val(), 'name1': $('input[name=name1]').val()}, 
        success: function(data) { 
         console.log(data); 
        }, 
        headers: {'X-Requested-With': 'XMLHttpRequest'}, 
        dataType: 'json' 
       }); 
      }); 
     }); 

回答

0

如果您在代码中挖,你会发现,$请求 - > AJAX()方法依赖于这样的逻辑(请参见供应商/ symfony中/ HTTP-基础/ Request.php):

$this->headers->get('X-Requested-With'); 

jQuery不会设置这个标题默认。您应该做的第一个操作 - 查看您的AJAX调用在浏览器中的开发人员工具中的外观。你可以在那里看到完整的HTTP标题 - 标题是否包含这个X-Requested-With行?如果它不存在(不太可能,但是谁知道),你可以手动将它添加到你的AJAX数据对象,例如:“X-Requested-With”:“XMLHttpRequest”。此外,我会建议替换$ data = $ request-> get('name1');与

$data = $request->input('name1'); 

哪个是更正确的方式来获取输入变量(get()方法甚至不存在于文档中)。

+0

感谢您的回答。我添加了你所说的内容。在此之后,不幸的是,标题还不包含X-Requested-With –

+0

试试这个方法:http://stackoverflow.com/questions/8163703/cross-domain-ajax-doesnt-send-x-requested-with-header –

+0

我发现我的问题,当我点击提交按钮时,它通过表单动作发布数据,而不是通过ajax url,但我不知道如何解决这个问题。 –