jquery自动完成意外令牌<

时间:2014-06-05 04:30:15

标签: jquery json jquery-ui laravel autocomplete

所以最近我使用Devbridge的jQuery Autocomplete创建了一个自动完成的laravel项目。我试图从数据库中获得建议,但它没有显示任何内容。

Google Chrome控制台显示"语法错误:意外令牌<在jquery.autocomplete.js上:85" Mozilla Firefox控制台显示" SyntaxError:JSON.parse:jquery.autocomplete.js上的意外字符:85"还有一个警告"在jquery-2.0.2.js上传递给getElementById()的空字符串:151"

两个错误都指向功能的最后一行Autocomplete()

transformResult: function (response) {
   return typeof response === 'string' ? $.parseJSON(response) : response;
}

这是我在bladeview中的文本输入(transaksi / add):

 {{Form::open(array('action' => 'TransactionController@store', 'role' => 'form'))}}
 <div class="box-body">
   <div class="form-group">
     {{Form::hidden('kode_acc')}}
     {{Form::label('kode', 'Kode Account') }}
     {{Form::text('kode', '', array('class' => 'form-control', 'id' => 'kode'))}}
   </div>
///some other inputs
 {{ Form::close() }}

路线:

//route autocomplete kode account
 Route::get('transaksi/getAccountsAutocomplete',array('uses'=>'AccountController@getAccountsAutocomplete'));

控制器

public function getAccountsAutocomplete(){
    $term = Input::get('kode');
    $suggestions = array();
    $search = DB::query("SELECT * 
                FROM  `accounts` 
                WHERE  `nama` LIKE  '%".$term."%')";
    foreach($search as $results => $account){
        $suggestions[] = array('id'=>$account->id,
                            'nama'=>$account->nama,
                            'value'=>$account->id);
    }
    return Response::json($suggestions);
}

jQuery脚本

 $(function(){
  $('#kode').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "{{URL('/getAccountsAutocomplete')}}",
            data: {
                kode: request.term
            },
            success: function (data) {
                console.log("[SUCCESS] " + data.length + " item(s)");
                response(data);
            },
        });
    },
    select: function(event, ui){
        $('#kode_acc').val(ui.item.id);
    }
  });
 });

- 更新 -

其他信息

从Chrome网络,我发现查询转到了

transaksi/add?query=

实际应该去

transaksi/getAccountsAutocomplete

到达控制器。

我是jQuery和Laravel的新手。对这个问题有什么帮助吗?谢谢。

1 个答案:

答案 0 :(得分:0)

在服务器中,您正在发送JSON标头,因此,您可以在jvascript文件中执行以下操作:

$.ajax({
        url: "{{URL('/getAccountsAutocomplete')}}",
        dataType, "json",
        data: {
            kode: request.term
        },
        success: function (data) {
            // "data" es a json object. No need convert it
        },
    });

请参阅属性dataType,该属性指定了服务器所需的数据类型。但是,您应该调试函数以验证要转换的数据类型:

transformResult: function (response) {
   console.log(response);
   return typeof response === 'string' ? $.parseJSON(response) : response;
}

编辑1

为了调试你的路线(也许Javascript ajax url找不到正确的控制器)你可以这样做:

// temporarily disable it
//return Response::json($suggestions);


// try to return a test json object 
return Response::json("controller found");

在您的响应中仍然打印html字符,然后控制器未正确路由

编辑2

在javascript代码中,您不能像以前那样放置PHP代码:

url: "{{URL('/getAccountsAutocomplete')}}",

实现这一目标的一个好方法是在头部创建一个全局javascript变量(必须放在任何javascript脚本之前)。

<script>
    var my_app_url = '<?php echo Url::to("/")?>';   
</script>

然后,您可以使用此URL执行ajax请求,如:

$.ajax({
        url: my_app_url + "/getAccountsAutocomplete",
        dataType, "json",
        data: {
            kode: request.term
        },
        success: function (data) {
            // "data" es a json object. No need convert it
        },
    });

然后,您的ajax请求应找到您的控制器