![](/img/trans.png)
[英]Uncaught TypeError: Cannot read property 'current' of null - Select2.js on selection any option
[英]Select2.js error: Cannot read property 'length' of undefined
我正在使用Select2 jquery插件,我無法使用json獲得結果。 在瀏覽器中查看json響應時看起來沒問題。 像這樣例如:
[{
"id" : "50",
"family" : "Portulacaceae "
}, {
"id" : "76",
"family" : "Styracaceae "
}, {
"id" : "137",
"family" : "Dipsacaceae"
}
]
在這種情況下使用ajax調用的URL是: http://localhost/webpage/json_family.php?term=acac&_=1417999511783
但是我無法在select2輸入中得到結果,控制台說:
未捕獲的TypeError:無法讀取未定義的屬性“長度”
這是代碼:
HTML
<input type="hidden" id="select2_family" name="term" style="width:30%" />
JS
$("#select2_family").select2({
minimumInputLength: 3,
ajax: {
url: "json_family.php",
dataType: 'json',
data: function (term) {
return {
term: term,
};
},
results: function (data) {
return { results: data.results };
}
}
});
PHP
$myArray = array();
if ($result = $mysqli->query("SELECT id,family FROM family WHERE family LIKE '%$term%'")) {
$tempArray = array();
while($row = $result->fetch_object()) {
$tempArray = $row;
array_push($myArray, $tempArray);
}
echo json_encode($myArray);
}
代碼中是否有錯誤?
好的,我的示例在我的測試服務器上工作,請執行以下操作
將您的查詢更改為此,更改了一些名稱以便於閱讀,但應該是相同的功能,重要的部分是在查詢中添加“AS TEXT”
$query = $mysqli->query("SELECT id, family AS text FROM family WHERE family LIKE '%$term%'"));
while ($row = mysql_fetch_assoc($query)) {
$return[] = $row;
}
echo json_encode($return);
第二,看起來你試圖從名為“結果”的json響應中調用一個屬性
如果是這種情況你的json應該是這樣的,請注意由於上面的更改,系列現在是文本:
{
"results":
[
{
"id": "50",
"text": "Portulacaceae "
},
{
"id": "76",
"text": "Styracaceae "
},
{
"id": "137",
"text": "Dipsacaceae"
}
]
}
但是您的php不會創建屬性結果,因此請更改結果函數以刪除.results屬性調用
results: function (data) {
return { results: data };
}
我使用的最終代碼(注意我沒有逃避/清理$ _GET [term]或將其綁定到查詢,建議你這樣做)如果你仍然有問題我可以發送一個鏈接到我的網站示例
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.css">
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.js"></script>
</head>
<script>
$(document).ready(function () {
$("#select2_family").select2({
minimumInputLength: 3,
ajax: {
url: "select2.php",
dataType: 'json',
data: function (term) {
return {
term: term,
};
},
results: function (data) {
return { results: data };
}
}
});
});
</script>
<input type="hidden" id="select2_family" name="term" style="width:30%" />
</html>
PHP
<?
/*** connection strings ***/
// get the database singleton instance
$yog = MySqlDatabase::getInstance();
// connect
try {
$yog->connect($host, $user, $password, $db_name);
}
catch (Exception $e) {
die($e->getMessage());
}
$term = $_GET['term'];
if (!$term){
$sub = $yog->query("SELECT id, family AS text FROM family");
} else {
$sub = $yog->query("SELECT id, family AS text FROM family where family like '%$term%'");
}
while ($row = mysql_fetch_assoc($sub)) {
$return[] = $row;
}
echo json_encode($return);
?>
注意:只是刺它。 什么伸出來。
你的json沒有財產結果,所以試試吧。
$("#select2_family").select2({
minimumInputLength: 3,
ajax: {
url: "json_family.php",
dataType: 'json',
data: function (term) {
return {
term: term,
};
},
results: function (data) {
// CHANGED
return { results: data };
}
}
});
更改了查詢 - 看看這是否有幫助
$myArray = array();
// here
if ($result = $mysqli->query("SELECT id, family AS text FROM family WHERE family LIKE '%$term%'")) {
$tempArray = array();
while($row = $result->fetch_object()) {
$tempArray = $row;
array_push($myArray, $tempArray);
}
echo json_encode($myArray);
}
您需要在結果上定義text
屬性
並且您可能需要添加formatResult
和formatSelection
$("#select2_family").select2({
minimumInputLength: 3,
ajax: {
url: "json_family.php",
dataType: 'json',
data: function (term) {
return {
term: term,
};
},
results: function (data) {return { results: data, text: 'family'}; },
formatResult: function(item) { return item.family; },
formatSelection: function(item) { return item.family; }
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.