0

我正在尝试在表单中使用 twitter bootstrap typeahead 并使用服务器端查询从数据库中获取记录。我已经启动并运行了该功能,一旦我在 3 个字符后开始输入搜索,它就会获取数据,这很棒。然而,在第一次加载页面时,我从主 bootstrap-typeahead.js 脚本中得到一个 500 错误异常,即:

NotFoundHttpException

使用页面时我没有收到错误 - 只是在第一次加载时。

所以,我假设脚本对服务器端的查询进行了初始调用,可能是空白查询,这可能是原因。我已经尝试在 laravel 的路由和搜索功能中添加默认值,但仍然是错误。

该页面按原样工作,但我不想出现此错误。我可以从哪里开始寻找?我什至不确定脚本发出了什么请求来抛出错误......

这是脚本 - 初始化 typeahed 函数:

$('#typeahead').typeahead({
source: function(query, process) {

    if(query===null) {
        query = 'aaa';
    }
    $.ajax({
        url: '/customers/typeahead/'+query,
        type: 'GET',
        dataType: 'json',
        //data: "query=" + query,
        async: false,
        success: function(data) {
            customers = [];
            map = {};
            $.each(data, function(i, customer) {
                //map object with unique name for each returned customer
                map[customer.first_name + ' ' + customer.last_name + ': ' + customer.email + ' - ' + customer.id ] = customer;
                customers.push(customer.first_name + ' ' + customer.last_name + ': ' + customer.email + ' - ' + customer.id);
            });
            process(customers);
        }
    });
},
minLength: 3,
updater: function(item) {
    alert("selected");
    id = map[item].id;
    fetchCustomer(id);
    return item;
}

});

这是laravel路线:

Route::get('customers/typeahead/{qry?}', function ($qry = 'a') {

    return Customer::customerTypeahead($qry);

});

这是 laravel 模型函数:

static public function customerTypeahead($qry) {

    //$qry = Input::get('query');
    $qry='%'.$qry.'%';

    $customers=Customer::where('first_name','like',$qry)
        ->orWhere('last_name','like',$qry)
        ->orWhere('email','like',$qry)
        ->get(array('first_name','last_name','email','id'))->toJson();

    return $customers;

}

有什么想法可能引发初始错误以及如何开始跟踪?

谢谢

4

1 回答 1

1

尝试将完整的网站 url 添加到 jQuery 的 url 对象中。如果你想要动态网址,你可以添加

<script>var WEBSITE_URL = {{ URL::to('/') }};</script>

在你的 js 应用程序之前,然后

...
$.ajax({
    url: WEBSITE_URL + 'customers/typeahead/'+query,
...

尝试使用 firebug 查看发送的内容和返回的内容,以便更好地定位错误所在。

于 2013-07-22T11:32:20.263 回答