gpt4 book ai didi

javascript - Jquery Autocomplete - 组合数据源 - 主要和后备

转载 作者:行者123 更新时间:2023-11-30 06:03:30 25 4
gpt4 key购买 nike

我搜索了论坛,但没有找到这个问题的任何答案。

我正在使用 jquery 自动完成来填充表单字段。

我目前正在使用 XML 文件中的本地数据(下面的代码部分)。这非常适合我需要的本地查询答案,但如果本地 XML 不包含正确的查询结果,我希望有一个后备数据源(JSON geoname - 请参阅下面的代码第二部分)。

我尝试合并这两个数据源但失败了,因此为了简单起见,我将它们单独发布在这里。

它们都独立工作 - 但如何将它们合并到一个结果字段中?此外,XML 数据应该是主要选择。

代码第一部分

XML 本地源代码

$(document).ready(function() {
var myArr = [];

$.ajax({
type: "GET",
url: "airports.xml",
dataType: "xml",
success: parseXml,
complete: setupAC,
failure: function(data) {
alert("XML File could not be found");
}
});




function parseXml(xml)
{
//find every query value
$(xml).find("state").each(function()
{
//you are going to create an array of objects
var thisItem = {};
thisItem['label'] = $(this).attr("label") + ', ' + $(this).attr("country");
thisItem['value'] = $(this).attr("iata");
myArr.push(thisItem);
});
}



function setupAC() {
$("#city").autocomplete({
source: myArr,
minLength: 3,
select: function(event, ui) {
$("#city").val(ui.item.iata);
$("#qf").submit();
}
});
}
});

第一部分代码 airports.xml 文件片段

<states>
<state label="London Heathrow" iata="LHR" country="UK" />
<state label="Syndey" iata="SYD" country="Australia" />

....

代码第一部分搜索表单片段

<label for="city">From</label></td>

代码第二部分这是使用 geonames 中的 JSON 进行自动完成的代码

$(function() {
function log( message ) {
$( "<div/>" ).text( message ).prependTo( "#log" );
$( "#log" ).attr( "scrollTop", 0 );
}

$( "#city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 20,
name_startsWith: request.term
},
success: function( data ) {
response( $.map( data.geonames, function( item ) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
}
}));
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
});

最佳答案

我认为您可以合并这两个数据集,特别是将 json 调用的结果与从 excel 中获取的数据合并。我就是这样做的(我没有使用来自 excel 的数据而是静态数据,但它应该是相同的);

 var availableTags = [];
var london = { label: 'London Airport - UK', value: 'LHR'};
var paris= { label: 'Paris Airport - FRA', value: 'PAR'};
availableTags.push(london);
availableTags.push(paris);
$("#city2").autocomplete({
source: availableTags
});

function log( message ) {
$( "<div/>" ).text( message ).prependTo( "#log" );
$( "#log" ).attr( "scrollTop", 0 );
}
function filterArrayForString(string, array){
var results = [];
$.each(array, function(i, el){

var label= el.label;

if (label.toLowerCase().indexOf(string.toLowerCase()) !== -1){
results.push(el);
}
});
return results;
}

$( "#city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 20,
name_startsWith: request.term
},
success: function( data ) {
var dataConv = $.map( data.geonames, function( item ) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
}
});
var filteredAvailable = filterArrayForString(request.term, availableTags );
console.log(request.term);
console.log(filteredAvailable);
var both = filteredAvailable.concat(dataConv);

response(both);
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});

合并后的数据在 both 变量中,您甚至可以对其进行排序以获得更好的结果。在这里 fiddle :http://jsfiddle.net/7cLxD/7/ (在 jsonP 输入中写入 lo,您将看到伦敦是从静态数组中获取的第一个结果)

关于javascript - Jquery Autocomplete - 组合数据源 - 主要和后备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6745447/

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