【问题标题】:PHP 500 (Internal Server Error) - A non-numeric value was encountered?PHP 500(内部服务器错误) - 遇到非数字值?
【发布时间】:2018-10-26 09:53:03
【问题描述】:

我想使用 jQuery 和 Laravel 进行自动完成搜索输入。但是当用户在搜索输入中至少写了 2 个字母时,我得到了一个错误:

GET http://proj.test/autocomplete-search?term=ca 500 (Internal Server Error)

你知道问题出在哪里吗?我想根据用户在搜索表单中插入的字母显示会议。

搜索输入:

<div class="col col-md-6">
    <h4 class="text-white  text-center font-weight-bold">Search</h4>
    <form class="main-search">
        <input type="text" id="search" class="autocomplete dropdown-toggle" placeholder="Conference, Citiy, Category">
    </form>
</div>

Laravel 路线:

Route::get('/autocomplete-search', 'AutocompleteController@search');

Laravel 自动完成控制器:

class AutocompleteController extends Controller
{
    public function search(Request $request){
        $search = $request->term;
        $conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();

        $data= [];
        foreach ($conferences as $key => $value){
            $data[] = ['id'=>$value->id, 'value' => $value->id + " " + $value->name];
        }

        //dd($data);
        return response($data);
    }
}

jquery:

$("#search").autocomplete({
   source: "{{ URL::to('autocomplete-search') }}",
   minLength: 2,
   select:function(key, value)
   {
       console.log(value);
   }
});

编辑:在“网络”选项卡中,错误显示为:

{消息:“遇到非数字值”,异常: “错误异常”,…}

并指向这一行:

{function: "search", class: "App\Http\Controllers\AutocompleteController", type: "->"}". 在 "$data[] = ['id'=>$value->id, '值' => $value->id + " " + $value->name];

【问题讨论】:

  • 500 响应意味着它是服务器端错误,即服务器代码由于某种原因崩溃。它不会向客户端透露更多详细信息,以防它无意中泄露了攻击者可以利用的某些内容(例如数据库详细信息或其他内容)。所以你必须检查服务器日志找出真正的错误,然后更容易知道如何修复它。
  • 您的输入字段没有名称,因此 PHP 不知道您对 $request-&gt;term 的含义。这可能是错误。
  • @Loek 查看问题开始时报告的 URL - 它似乎很高兴地在查询字符串上发送“term”参数。
  • "同样的错误"....你还没有发现错误!您所拥有的只是通用的 500 响应。正如我所说,我并没有声称找到了修复程序。您需要在服务器日志中找到真正的错误消息。
  • @ADyson 啊,是的,错过了!然后确实是检查 Laravel 和/或服务器日志的问题,看看它们是否有助于查明问题。

标签: php jquery ajax laravel


【解决方案1】:

当您需要使用字符串连接运算符 (.) 时,您使用了加法运算符 (+)。

所以

$data[] = ['id'=>$value->id, ' value' => $value->id + " " + $value->name]

需要成为

$data[] = ['id'=> $value->id, 'value' => $value->id . " " . $value->name]

否则 PHP 认为您正在尝试对这些字段进行添加,而实际上它们是您想要放入单个变量中的文本。

请参阅http://php.net/manual/en/language.operators.php 了解哪些运算符在 PHP 中执行的操作。

【讨论】:

  • 谢谢,你知道为什么,例如,如果用户写“co”并且数据库中有一个名称为“conf”的会议,它会出现在自动完成“conf conf”中,而不仅仅是“conf” “?
  • 可能是因为我在之前的 cmets 中提到的 - "'value' => $value->name . " " . $value->name" 在输出中重复了两次名称。你的意思是 "'value' => $value->id . " " . $value->name" 吗?我将编辑我的答案(就像我编辑你的问题一样)以反映这种变化。
猜你喜欢
  • 1970-01-01
  • 2014-06-08
  • 2018-01-15
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多