我使用http://loopj.com/jquery-tokeninput/是因为我需要将选择框直接连接到数据库。
我写了PHP脚本来接受GET请求,如他的GitHub上所述:
<?php
require_once('sondaggio.php');
# Connect to the database
$s = new Sondaggio();
# Perform the query
$query = sprintf("SELECT id, nome from Regioni WHERE nome LIKE '%s%' LIMIT 5", $s->getRealEscapeString($_GET["q"]));
$arr = array();
$arr = $s->readFromDB($query);
# JSON-encode the response
$json_response = json_encode($arr);
# Return the response
echo $json_response;
?>
Sondaggio类的构造函数:
function __construct(){
$this->conn = new mysqli($this->host, $this->user, $this->password, $this->database);
// Check connection
if ($this->conn->connect_error) {
exit("Connection failed: " . $this->conn->connect_error);
}
}
函数readFromDB($ query):
public function readFromDB($query){
$arr = array();
$result = $this->conn->query($query);
if ($result->num_rows > 0){
while($row = $result->fetch_object()) {
$arr[] = $row;
}
}
return $arr;
}
所有程序都经过测试且运行良好,根据他的文档输出是正确的。但是,当我开始在选择框中键入内容时出现错误:
[Error] TypeError: undefined is not an object (evaluating 'term.replace')
regexp_escape (jquery.tokeninput.js:828)
find_value_and_highlight_term (jquery.tokeninput.js:844:88)
(anonymous function) (jquery.tokeninput.js:899)
each (jquery.min.js:2:11781)
populateDropdown (jquery.tokeninput.js:896)
success (jquery.tokeninput.js:1031)
o (jquery.min.js:2:14739)
fireWith (jquery.min.js:2:15504)
w (jquery.min.js:4:12484)
d (jquery.min.js:4:18320)
所以我被这个错误困扰,不知道为什么会出现,请帮助我。谢谢
编辑:
var_dump($ json_response)(带有... php?q = t)输出:
string(75) "[{"id":"16","nome":"Toscana\r"},{"id":"17","nome":"Trentino-Alto Adige\r"}]"
答案 0 :(得分:1)
解决了,只是一个错误。 根据{{3}}文档:
您的脚本应以以下格式输出JSON搜索结果:
[ {"id":"856","name":"House"}, {"id":"1035","name":"Desperate Housewives"}, ... ]
此处的字段为“ id”和“ name”。 我的查询改为询问数据库“ id”和“ nome”:
$query = sprintf("SELECT id, nome from...
所以我只是这样更新查询:
$query = sprintf("SELECT id, nome as name from...
现在一切正常!