我正在整合使用Geonames和Select2的Google Map API,以允许用户输入他/她访问过的城市。
目前,我正在尝试为搜索区域找到一种方法,以显示用户在重新加载页面时在之前的会话中所做的选择(例如,如果用户已经在之前的会话中进入了法国巴黎,那么巴黎,法国应该在重新装载时预先装入搜索区域)。选择存储在一个数据库中,但目前我只能通过Geonames将其中一个先前选定的城市放入搜索区域(我需要通过Geonames来传递lat& long)。我想要修复用户在上一个会话中输入的位置。
我正在使用的代码如下 - 感谢您的帮助:
function locationFormatResult(location) {
return location.name + ", " + location.adminName1 + ", " + location.countryName;
}//results format
function locationFormatSelection(location) {
return location.name + ", " + location.adminName1 + ", " + location.countryName;
}//selection format
$(function () {
$('#citiestext').select2({
id: function(e) { return e.name + ',' + e.adminName1 + ',' + e.countryName + ',' + e.lat + ',' + e.lng},
placeholder: 'Location',
multiple: true,
allowClear: true,
width: '350px',
height: '50px',
overflow: 'auto',
minimumInputLength: 2,
ajax: { //this is the ajax call for when the user selects a city
url: 'http://ws.geonames.org/searchJSON',
dataType: 'jsonp',
data: function (term) {
return {
featureClass: "P",
style: "medium",
isNameRequired: "true",
q: term
};
},
results: function (data) {
return {
results: data.geonames
};
}
},
initSelection : function(element, callback){
for (var i=11;i<13;i++){
$.ajax("http://ws.geonames.org/searchJSON",{//ajax for preloading
dataType: 'jsonp',
data:{
maxRows:1,
q: i}//for this example, I'm using the numbers 11 & 12 as my Geonames queries just to test the preloading functionality (both numbers do have corresponding locations in Geonames if run through a query)
}).done(function(data){callback(data.geonames);}); //PROBLEM: currently is only returning the location for "12" - I need it to return locations for 11 and 12 in the select area
}},
formatResult: locationFormatResult,
formatSelection: locationFormatSelection,
dropdownCssClass: "bigdrop",
escapeMarkup: function (m) { return m; }
});
});
jsfiddle:http://jsfiddle.net/YDJee/(试图在选择框中输入多个条目)
答案 0 :(得分:3)
关键是需要使用多个select2的对象数组调用回调。
在这种情况下,由于需要从ajax调用中收集每个json对象,因此需要使用jQuery deferreds。
类似的东西:
initSelection : function(element, callback){
var result = new Array();
var f = function(i) {
return $.ajax("http://ws.geonames.org/searchJSON",{
dataType: 'jsonp',
data:{
maxRows:1,
q: i
},
success: function(data) { result.push(data);}})
};
var def = [];
for (var i=11;i<13;i++){
def.push(f(i))
}};
$.when.apply($, def).done(function() {
callback(result);
});
}
答案 1 :(得分:0)
对于那些同时使用id
回调的人,以及发现他们的问题不是异步问题的人,请查看this(在此帖子中仍然是必要的修补程序)。