Laravel编码/解码ajax网址

时间:2016-12-07 13:10:02

标签: php jquery ajax laravel

控制器:

public function ajaxsearch(Request $request)
    {
        if ($request->ajax()) {
            $output = "";
            $productindex = Product::where('product_name', 'LIKE', '%' . $request->states . '%')->take(4)->get();

            if ($productindex) {
                foreach ($productindex as $key => $value) {
                    $output .= '<div>
                                <img src="/images/'. $value->slidephoto->first()->sm_photo .'.jpg" width="400px">
                                <h3>'. $value->product_name .'</h3>
                                </div>';
                }
                return Response($output);
            }
        }
        return view('main.ajax');
    }

jquery的:

$('#searchinput').on('keyup', function(){
      $value=$(this).val();
      $.ajax({
        type: 'get',
        url: '{{URL::to('ajaxsearch')}}',
        data: {'states':$value},
        success:function(data){
          $('#fixedsearch').html(data);

        }
      });
    });

当ajax获取的值不是英文时,我在控制台日志中遇到此问题。

191.js:5 GET http://localhost:8000/ajaxsearch?states=%CF%80 500 (Internal Server Error)

我正在使用Laravel 5.1和jquery v.1.9.1。 我作为补充使用的外语是希腊语,我有这个特定的问题。

2 个答案:

答案 0 :(得分:2)

如果您传入了URL编码字符,则可以使用urldecode将其转换回正确的字符。

由于URL编码字符基本上是包含百分号的字符串,因此当您连接更多百分号时,此确实会混淆SQL。

Product::where('product_name', 'LIKE', '%' . $request->states . '%')

$request->states%CF%80,因此创建的SQL看起来像... from product where product_name like %%CF%80% - 在like项检查中,百分号无意义。

相反,Product::where('product_name', 'LIKE', '%' . urldecode($request->states) . '%')

$request->states现在为π,因此创建的SQL看起来像... from product where product_name like %π%

答案 1 :(得分:-2)

尝试使用encodeURI()javscript函数

$('#searchinput').on('keyup', function(){
      $value=$(this).val();
      $.ajax({
        type: 'get',
        url: '{{URL::to('ajaxsearch')}}',
        data: {'states':encodeURI($value)},
        success:function(data){
          $('#fixedsearch').html(data);

        }
      });
    });