#javascript #jquery #json #mobile
#javascript #jquery #json #Мобильный
Вопрос:
в конце концов, у меня проблема с jquery mobile openlayer search;
$('#searchpage').live('pageshow',function(event, ui){
$('#query').bind('change', function(e){
$('#search_results').empty();
if ($('#query')[0].value === '') {
return;
}
$.mobile.showPageLoadingMsg();
// Prevent form send
e.preventDefault();
var searchUrl = 'http://ws.geonames.org/searchJSON?featureClass=Pamp;maxRows=10';
searchUrl = 'amp;name_startsWith=' $('#query')[0].value;
$.getJSON(searchUrl, function(data) {
$.each(data.geonames, function() {
var place = this;
$('<li>')
.hide()
.append($('<h2 />', {
text: place.name
}))
.append($('<p />', {
html: '<b>' place.countryName '</b> ' place.fcodeName
}))
.appendTo('#search_results')
.click(function() {
$.mobile.changePage('#mappage');
var lonlat = new OpenLayers.LonLat(place.lng, place.lat);
map.setCenter(lonlat.transform(gg, sm), 10);
})
.show();
});
$('#search_results').listview('refresh');
$.mobile.hidePageLoadingMsg();
});
});
// only listen to the first event triggered
$('#searchpage').die('pageshow', arguments.callee);
});
`
мой вопрос в том, что у меня есть файл json, но я не знаю, как изменить URL-адрес поиска, используя мой файл json.Мне нужна помощь здесь.
Большое вам спасибо
Ответ №1:
Поскольку вы на самом деле не указали явно, я предполагаю, что наряду с получением результатов поиска вы также хотите обновить свой searchUrl другим, который возвращается вашим файлом JSON, который вы захотите использовать для следующего поиска.
В этом случае самый простой способ, без масштабных операций с вашим текущим кодом, — поднять ваш searchUrl как глобальную переменную и включить метод для ее обновления.
var jsonUrl = {
param: 'http://ws.geonames.org/searchJSON?featureClass=Pamp;maxRows=10',
update: function (url) {
this.param = url;
}
};
Измените это:
var searchUrl = 'http://ws.geonames.org/searchJSON?featureClass=Pamp;maxRows=10';
searchUrl = 'amp;name_startsWith=' $('#query')[0].value;
Для этого:
var searchUrl = jsonUrl.param 'amp;name_startsWith=' $('#query')[0].value;
Предполагая, что ваш новый URL-адрес json находится в contained (your_json_object).url, добавьте одну строку перед закрытием $.getJSON:
jsonURL.update(data.url);
Ваш окончательный код должен выглядеть следующим образом:
var jsonUrl = {
param: 'http://ws.geonames.org/searchJSON?featureClass=Pamp;maxRows=10',
update: function (url) {
this.param = url;
}
};
$('#searchpage').live('pageshow',function(event, ui){
$('#query').bind('change', function(e){
$('#search_results').empty();
if ($('#query')[0].value === '') {
return;
}
$.mobile.showPageLoadingMsg();
// Prevent form send
e.preventDefault();
var searchUrl = jsonUrl.param 'amp;name_startsWith=' $('#query')[0].value;
$.getJSON(searchUrl, function(data) {
$.each(data.geonames, function() {
var place = this;
$('<li>')
.hide()
.append($('<h2 />', {
text: place.name
}))
.append($('<p />', {
html: '<b>' place.countryName '</b> ' place.fcodeName
}))
.appendTo('#search_results')
.click(function() {
$.mobile.changePage('#mappage');
var lonlat = new OpenLayers.LonLat(place.lng, place.lat);
map.setCenter(lonlat.transform(gg, sm), 10);
})
.show();
});
$('#search_results').listview('refresh');
$.mobile.hidePageLoadingMsg();
});
});
// only listen to the first event triggered
$('#searchpage').die('pageshow', arguments.callee);
//add this to update new URL retrieved into your jsonUrl object.
jsonURL.update(data.url);
});
Комментарии:
1. Спасибо за ваш ответ, я просто меняю jsonURL на this, var jsonUrl = { param: ‘test.json’, update: function (url) { this.param = url; } }; это правильно?
2. переменной «param» должен быть URL-адрес, с которого вы получаете данные. Учитывая контекст вашего вопроса, это было бы » ws.geonames.org/searchJSON ? featureClass= Pamp; maxRows = 10 » как то, что я написал выше.
3. я отредактировал свой ответ выше, чтобы включить полный код в конце.
4. пожалуйста, примите ответ, если это то, что вам нужно. Спасибо.
5. спасибо за информацию, как я хочу изменить и использовать свой собственный файл json вместо использования «ws.geonames.org/searchJSON ? featureClass=Pamp;maxRows=10»; у меня есть json имя файла test.json