我正在进行建议选择(使用selectize.js并使用示例customization.html而不使用主题更换器)并且我在尝试将数据库连接到此选择时遇到问题
我需要在select.options中使用像这样的格式来使我的选择工作:
[{id:'1',title:'test',url:'testurl'}
{id:'2',title:'test2',url:'testurl2'}
...
]
使用PHP请求,我创建一个看起来像这样的JSON对象但是当我在JS中收到它时,“对象”键无处不在并且毁了我的JSON。
我的PHP请求(使用PDO)非常简单:
$result='[';
$query = $bdd->prepare("SELECT id, login, name, surname FROM users WHERE id!=:id");
$query->execute(array( ':id' => $_SESSION["id"]));
while($row = $query->fetch())
{
$id = $row[0];
$login = $row[1];
$name = $row[2];
$surname = $row[3];
if($first != 1)
$result .= ',';
else
$first =0;
$result.='{"id":"'.$id.'",
"titre":"'.$login.'",
"url":"'.$name.' '.$surname.'"}';
}
$result.=']';
return $result;
最后,这是我在JS脚本上获取它的方式:
ajaxCall("getPeople",null/*datas*/,false/*asynchronous*/,function(result){
var newvalue = [];
for(var root in result["result"])
newvalue.push(result["result"][root]);
console.log(newvalue);
return newvalue;
});
在控制台日志中,我收到了这个JSON,其中每个项目前都有“对象”键,而且这些键不适用于选择:
[Object { id="2", titre="test", url=" "}, Object { id="7", titre="test2", url=" "}, Object { id="8", titre="test3", url=" "}]
那么您是否有任何关于删除这些键或修改我的JSON对象的想法,以便他可以使用选择性选项格式?
谢谢!!
答案 0 :(得分:1)
不要自己构建JSON代码。使用json_encode
:
$result = array();
$query = $bdd->prepare("SELECT id, login, name, surname FROM users WHERE id!=:id");
$query->execute(array( ':id' => $_SESSION["id"]));
while($row = $query->fetch(PDO::FETCH_NUM)) {
$result[] = array(
'id' => $row[0],
// Are you sure it's spelled "titre"? You wrote 'title' elsewhere.
'titre' => $row[1],
'url' => "{$row[2]} {$row[3]}",
);
);
// Output to browser
Header("Content-Type: application/json;charset=UTF-8");
die(json_encode($result));
我认为您可以直接使用上述数据:
ajaxCall(
"getPeople",
null/*datas*/,
false/*asynchronous*/,
function(result) {
console.log(result);
// Debugging, the Viking way.
prompt("I got this and no mistake", JSON.stringify(result));
return result;
});
您发布的示例应该像这样工作。在获得数据之前,您无法运行选择,所以您可以:
$.get('/path/to/getpeople.php', function(result) {
// If we're here, the call succeeded
$('#select-links').selectize({
...
options: result, <-- here it goes!
render: ...
});
});
JSON会起作用;请务必发送JSON的Content-Header,并验证字段是&#39; id&#39;,&#39; title&#39;和&#39; url&#39;。
实际上你可以随处更换&#39; url&#39;使用&#39;全名&#39;如果你想;显然,selectize只在渲染函数中使用该字段。
答案 1 :(得分:1)
我测试了你的PHP脚本,似乎返回了有效的JSON。例如:
[
{
"id": "1",
"titre": "login",
"url": "name username"
},
{
"id": "2",
"titre": "login",
"url": "name username"
},
{
"id": "3",
"titre": "login",
"url": "name username"
}
]
在JavaScript中,请尝试以下操作:
ajaxCall("getPeople",null/*datas*/,false/*asynchronous*/,function(result){
console.log(result);
return result;
});
JavaScript应自动将result
转换为&#34; JSON&#34;对象