Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Select2.js错误:无法读取属性';长度';未定义的_Javascript_Php_Jquery_Json_Jquery Select2 - Fatal编程技术网

Javascript Select2.js错误:无法读取属性';长度';未定义的

Javascript Select2.js错误:无法读取属性';长度';未定义的,javascript,php,jquery,json,jquery-select2,Javascript,Php,Jquery,Json,Jquery Select2,我使用的是Select2 jquery插件,无法使用json获得结果。在浏览器中查看json响应时,它看起来正常。比如说: [{ "id" : "50", "family" : "Portulacaceae " }, { "id" : "76", "family" : "Styracaceae " }, { "id" : "137", "family" : "Dipsacaceae"

我使用的是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:无法读取未定义的属性“length”

以下是代码:
html

<input type="hidden" id="select2_family" name="term" style="width:30%" />
$("#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 };
   }

  }
});
$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);
}
php

<input type="hidden" id="select2_family" name="term" style="width:30%" />
$("#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 };
   }

  }
});
$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);
}

代码中有错误吗?

注意:只是尝试一下。就是突出的部分。

您的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);
}

您需要在结果上定义
文本
属性

您可能需要添加
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; }
    }
});

好的,我让您的示例在我的测试服务器上运行,请执行以下操作

将您的查询更改为此,为可读性更改了一些名称,但应具有相同的功能,重要的部分是在查询中添加“AS TEXT”

其次,看起来您正试图从名为“results”的json响应调用一个属性

如果是这种情况,您的json应该是这样的,请注意,由于上面的更改,族现在是文本:

{
"results":
[
    {
        "id": "50",
        "text": "Portulacaceae "
    },
    {
        "id": "76",
        "text": "Styracaceae "
    },
    {
        "id": "137",
        "text": "Dipsacaceae"
    }
]
}
但是php不会创建属性results,因此请更改results函数以删除.results属性调用

   results: function (data) {
     return { results: data };
   }
我使用的最后一个代码(注意,我没有转义/清理$\u 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>

$(文档).ready(函数(){
$(“#选择2#U系列”)。选择2({
最小输入长度:3,
阿贾克斯:{
url:“select2.php”,
数据类型:“json”,
数据:功能(术语){
返回{
任期:任期,,
};
},
结果:功能(数据){
返回{结果:数据};
}
}
});
});
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);

?>

谢谢,但当我这样做时,会显示新的错误:无法读取unfinedi的属性'toUpperCase',我会得到与我在上述答案中评论的相同的错误。旧的不再显示,但显示了这个“toUpperCase”,并且没有数据显示我更新的php。我对这个插件还不太熟悉,无法直接讨论这个问题,但我浏览了一些文档。希望你能很快把它做好