EDIT:我为无结果处理找到了一个临时解决方法。您可以返回id为0的未找到结果标记。它仍然是可选的,但在将标签插入数据库时可以跳过它,如下所示:
if($tagId != 0){
// tag is not the no result tag, so continue
}
这是一个暂时的解决方案,另一个问题仍然存在
第2版:回答无结果处理问题。我在代码中犯了一个错误,将preSelectedTags变成了PHP错误。哎呀
我已经找了两天了,似乎找不到答案。
我正在使用select2添加标记功能。它显示得很好,并且在设置了标记的情况下工作。然而,当没有预先选择的标签时,整个过程就会中断。以下是我的select2的样子:
$('.candidateTags').select2({
//omitted for brevity
}).select2('data',preSelectedTags);
preSelectedTags是一个变量,它包含来自PHP的json编码数组。当实际添加了标签时,这很好,但当它找不到任何可以预选的东西时,整个过程就会崩溃。
此外,我似乎不知道当没有找到结果时ajax调用应该返回什么。如果没有结果,它会返回以下内容:
else {
$results[] = array('id'=> "-1", 'text' => 'Er zijn geen resultaten gevonden');
}
echo json_encode($results);
很明显,这返回了一个可选择的选项,破坏了我的整个代码。有人能解释一下我如何使用可选的预选,以及我应该如何处理"找不到退货"消息吗?
删除else条件并在java脚本中尝试此代码
if(typeof(preSelectedTags)=='undefined') {
$('.candidateTags').select2('data',null);
}
我自己解决了问题。
第一部分(关于preSelectedTags给出错误并破坏我的select2元素):我用这个来创建标签数组:
var preSelectedTags = [<?php
foreach($preSelectedTags as $tag) {
echo($tag . ',');
}
?>];
这是有效的,但是当$preSelectedTags为空时,PHP将把preSelectedTagsvar变成一个错误。要解决此问题,请添加if语句:
if(!empty($preSelectedTags)){
//code
}
现在是第二部分(关于"未找到结果"可选选项):
显然有两种方法可以解决这个问题:
第一个是在json字符串中添加"disabled:true",所以它看起来像这样:
else {
$results[] = array('id'=> "-1", 'text' => 'no results found', 'disabled' => 'true');
}
echo json_encode($results);
然而,这对我来说并没有起到任何作用。另一种解决方法是省略$results数组中的id:
else {
$results[] = array('text' => 'Er zijn geen resultaten gevonden');
}
echo json_encode($results);