gpt4 book ai didi

javascript - 如何在 w3 自动完成 https ://www. w3schools.com/howto/howto_js_autocomplete.asp 给出的代码中提供 json 数据

转载 作者:行者123 更新时间:2023-12-02 21:40:46 25 4
gpt4 key购买 nike

我正在尝试从数据库提供数据,因此我通过链接示例以 JSON 格式发送数据:-127.0.0.1:8000/test 运行良好但我想在这段代码中使用 JSON 格式的数据 https://www.w3schools.com/howto/howto_js_autocomplete.asp而不是 var 国家/地区

此代码是提供我的w3school(自动完成java脚本代码)

我的测试 API 输出:

"[{\"model\": \"core.newcarmodel\", \"pk\": 1, \"fields\": {\"car_model_new\": \"swift\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 2, \"fields\": {\"car_model_new\": \"wagonr\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 3, \"fields\": {\"car_model_new\": \"baleno\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 4, \"fields\": {\"car_model_new\": \"breeza\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 5, \"fields\": {\"car_model_new\": \"spresso\"}}]"

使用 var myArr = JSON.parse(this.responseText) 解析后;



[{"model": "core.newcarmodel", "pk": 1, "fields": {"car_model_new": "swift"}}, {"model": "core.newcarmodel", "pk": 2, "fields": {"car_model_new": "wagonr"}}, {"model": "core.newcarmodel", "pk": 3, "fields": {"car_model_new": "baleno"}}, {"model": "core.newcarmodel", "pk": 4, "fields": {"car_model_new": "breeza"}}, {"model": "core.newcarmodel", "pk": 5, "fields": {"car_model_new": "spresso"}}]

最佳答案

您可以使用映射函数,迭代数组并检索数组中的模型名称。我已经更新了我的答案,并在您发出 AJAX 请求的地方添加了内嵌注释。我还展示了您的数据有什么问题。希望它能解决您的问题。如果修复的话请告诉我。

/* This is the dataset provided by you. It is like JSONed twice. The best solution would be change into JSON. */

var myArr = "[{\"model\": \"core.newcarmodel\", \"pk\": 1, \"fields\": {\"car_model_new\": \"swift\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 2, \"fields\": {\"car_model_new\": \"wagonr\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 3, \"fields\": {\"car_model_new\": \"baleno\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 4, \"fields\": {\"car_model_new\": \"breeza\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 5, \"fields\": {\"car_model_new\": \"spresso\"}}]";

/* You should convert it into JSON like below. No need of extra quotes around the array and unnecessary backspaces. Commenting below code as you want to work with your own data. */

/*
var myArr = [
{"model": "core.newcarmodel", "pk": 1, "fields": {"car_model_new": "swift"}},
{"model": "core.newcarmodel", "pk": 2, "fields": {"car_model_new": "wagonr"}},
{"model": "core.newcarmodel", "pk": 3, "fields": {"car_model_new": "baleno"}},
{"model": "core.newcarmodel", "pk": 4, "fields": {"car_model_new": "breeza"}},
{"model": "core.newcarmodel", "pk": 5, "fields": {"car_model_new": "spresso"}}
]
*/

function autocomplete(inp, arr) {
/*the autocomplete function takes two arguments,
the text field element and an array of possible autocompleted values:*/
var currentFocus;
/*execute a function when someone writes in the text field:*/
inp.addEventListener("input", function(e) {
var a, b, i, val = this.value;
/*close any already open lists of autocompleted values*/
closeAllLists();
if (!val) { return false;}
currentFocus = -1;
/*create a DIV element that will contain the items (values):*/
a = document.createElement("DIV");
a.setAttribute("id", this.id + "autocomplete-list");
a.setAttribute("class", "autocomplete-items");
/*append the DIV element as a child of the autocomplete container:*/
this.parentNode.appendChild(a);
/*for each item in the array...*/
for (i = 0; i < arr.length; i++) {
/*check if the item starts with the same letters as the text field value:*/
if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
/*create a DIV element for each matching element:*/
b = document.createElement("DIV");
/*make the matching letters bold:*/
b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
b.innerHTML += arr[i].substr(val.length);
/*insert a input field that will hold the current array item's value:*/
b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
/*execute a function when someone clicks on the item value (DIV element):*/
b.addEventListener("click", function(e) {
/*insert the value for the autocomplete text field:*/
inp.value = this.getElementsByTagName("input")[0].value;
/*close the list of autocompleted values,
(or any other open lists of autocompleted values:*/
closeAllLists();
});
a.appendChild(b);
}
}
});
/*execute a function presses a key on the keyboard:*/
inp.addEventListener("keydown", function(e) {
var x = document.getElementById(this.id + "autocomplete-list");
if (x) x = x.getElementsByTagName("div");
if (e.keyCode == 40) {
/*If the arrow DOWN key is pressed,
increase the currentFocus variable:*/
currentFocus++;
/*and and make the current item more visible:*/
addActive(x);
} else if (e.keyCode == 38) { //up
/*If the arrow UP key is pressed,
decrease the currentFocus variable:*/
currentFocus--;
/*and and make the current item more visible:*/
addActive(x);
} else if (e.keyCode == 13) {
/*If the ENTER key is pressed, prevent the form from being submitted,*/
e.preventDefault();
if (currentFocus > -1) {
/*and simulate a click on the "active" item:*/
if (x) x[currentFocus].click();
}
}
});
function addActive(x) {
/*a function to classify an item as "active":*/
if (!x) return false;
/*start by removing the "active" class on all items:*/
removeActive(x);
if (currentFocus >= x.length) currentFocus = 0;
if (currentFocus < 0) currentFocus = (x.length - 1);
/*add class "autocomplete-active":*/
x[currentFocus].classList.add("autocomplete-active");
}
function removeActive(x) {
/*a function to remove the "active" class from all autocomplete items:*/
for (var i = 0; i < x.length; i++) {
x[i].classList.remove("autocomplete-active");
}
}
function closeAllLists(elmnt) {
/*close all autocomplete lists in the document,
except the one passed as an argument:*/
var x = document.getElementsByClassName("autocomplete-items");
for (var i = 0; i < x.length; i++) {
if (elmnt != x[i] && elmnt != inp) {
x[i].parentNode.removeChild(x[i]);
}
}
}
/*execute a function when someone clicks in the document:*/
document.addEventListener("click", function (e) {
closeAllLists(e.target);
});
}

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
/* Find JSON.parse twice because your JSON data is also stringified. */
var myArr = JSON.parse(JSON.parse(this.responseText));
const carModelsArr = myArr.map((d) => d.fields.car_model_new)
autocomplete(document.getElementById("myInput"), carModelsArr)
}
};
xmlhttp.open("GET", "http://127.0.0.1:8000/test", true);
xmlhttp.send();
* {
box-sizing: border-box;
}

body {
font: 16px Arial;
}

.autocomplete {
/*the container must be positioned relative:*/
position: relative;
display: inline-block;
}

input {
border: 1px solid transparent;
background-color: #f1f1f1;
padding: 10px;
font-size: 16px;
}

input[type=text] {
background-color: #f1f1f1;
width: 100%;
}

input[type=submit] {
background-color: DodgerBlue;
color: #fff;
}

.autocomplete-items {
position: absolute;
border: 1px solid #d4d4d4;
border-bottom: none;
border-top: none;
z-index: 99;
/*position the autocomplete items to be the same width as the container:*/
top: 100%;
left: 0;
right: 0;
}

.autocomplete-items div {
padding: 10px;
cursor: pointer;
background-color: #fff;
border-bottom: 1px solid #d4d4d4;
}

.autocomplete-items div:hover {
/*when hovering an item:*/
background-color: #e9e9e9;
}

.autocomplete-active {
/*when navigating through the items using the arrow keys:*/
background-color: DodgerBlue !important;
color: #ffffff;
}
<!--Make sure the form has the autocomplete function switched off:-->
<form autocomplete="off" action="/action_page.php">
<div class="autocomplete" style="width:300px;">
<input id="myInput" type="text" name="myCountry" placeholder="Country">
</div>
<input type="submit">
</form>

关于javascript - 如何在 w3 自动完成 https ://www. w3schools.com/howto/howto_js_autocomplete.asp 给出的代码中提供 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60370898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com