如何使用文本框和按钮在Laravel中使用Ajax搜索

时间:2017-11-05 19:11:03

标签: jquery ajax laravel

<form method="post" action="{{route('searchName')}}" class="form-horizontal" id="formSearch">
                    <span class="input-group-btn">
                        <input type="text" name="contactname" id="txtSearch" class="form-control text-right"/>
                        <button class="btn btn-info pull-right" id="btnSearch" type="submit">
                            <i class="glyphicon glyphicon-search">Search</i> </button>
                    </span>
                </form>

上面是index.blade.php中的表单,然后我就像ajax:

$('#formSearch').on('submit',function (e) {
    e.preventDefault();
    var name = $('#txtSearch').val();
    var url = $('#formSearch').attr('action');
    $.get({
        url: url,
        data: name,
        success: function (datas) {
            console.log(datas);
        }
    })
})

在我的控制器中我有:如果你想知道,Contact是我的模型的名称,其中有一个可填写的:

public function searchNames(Request $request) {
    if($request->ajax()) {
        $contact = Contact::find($request->name);
        $gotyou = DB::select("SELECT id FROM contacts WHERE name = '$contact'");
        return response($gotyou);
    }
}

并在路线中:

Route::get('/student/search','AjaxController@searchNames')->name('searchName');

我在我的控制台中得到不应该,我认为我的问题是我不能同时使用获取和发布!如何在文本框中发布文本并使用该名称搜索数据库,并返回具有该名称的记录。

2 个答案:

答案 0 :(得分:0)

这里几乎没有问题......只是想让你朝着正确的方向前进......

首先,你的route :: get应该是route :: post,在这种情况下......

然后重新调整你的控制器功能...我建议你阅读整个Laravel文档...它很棒,只需要你一个小时左右...你会从中学到很多东西。 ..

public function searchNames(Request $request) {
    if($request->ajax()) {
        $contact = Contact::find($request->name);
        // $contact is actually an instance of the Contact model, not a name
        //$gotyou = DB::select("SELECT id FROM contacts WHERE name = '$contact->name'");
       // if you want to get a single value and not a collection, use ->value()
       $gotyou = DB::table('contacts')->where('name', $contact->name)->value('id');
        return response($gotyou);
    }
}

答案 1 :(得分:0)

$('#formSearch').on('submit',function (e) {
    e.preventDefault();
    var name = $('#txtSearch').val();
    var url = $('#formSearch').attr('action');
    var post = $('#formSearch').attr('method');
    $.ajax({
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        type: post,
        url: url,
        data: {name:name},
        success: function (data) {
            alert(data[0]);
        }
    })
})

问题已修复,在控制器中,您可以使用获取数据 $variable = $_POST['name']记得我们使用name传递了我们的文本框数据,上面提到了代码,然后当你使用$ _POST ['name']获得它时,你可以return response($variable)获得结果回顾。