Dojo использует «хранилища» для извлечения данных с серверов. Эти магазины лениво извлекают данные, поэтому только при первом запросе. Каждый раз, когда ваш код JavaScript нуждается в данных, он может запросить их в хранилище и, если он уже получил их, он вернет их, а в противном случае он выйдет и получит их.
Из-за асинхронного характера хранилищ вам необходимо выполнять асинхронный вызов каждый раз, когда вам нужны данные.
В вашем случае вы могли бы сделать что-то вроде:
// Create the store for later use
var store = new dojo.data.ItemFileReadStore({
contentType: 'application/json'
,clearOnClose: true
,urlPreventCache: true
,url: "http://192.168.1.65:9080/RAD8JAX-RSWeb/jaxrs/customers"
});
И каждый раз, когда вам нужно получить данные из магазина, вы делаете:
store.fetch({
onItem: function(item, request) {
alert('I fire after each returned json item')
}
,onComplete: function(items, findResult) {
alert('I fire when the data has loaded completely.');
}
,onError: function(error, request) {
alert('I fire when an error occurs');
}
});
Только в первый раз будет отправлен запрос на сервер. Все остальные запросы будут обслуживаться из кеша магазинов. Если вы хотите очистить кеш, вам нужно «закрыть» магазин. В следующий раз при вызове извлечения в хранилище будет получен новый запрос к серверу. Вы можете закрыть его следующим образом:
store.close();
Хранилища предназначены для обслуживания данных сервера транспарантным способом. Так что не имеет значения, что вы обслуживаете json, xml или csv: все это будет загружено в магазин и доставлено вам таким же образом. Вам просто нужно знать две вещи:
- Данные должны обслуживаться в определенном формате: формат
- Все элементы, которые вы получаете в методах onItem и onComplete, могут использоваться только через API dojo Read, с которым вы можете ознакомиться здесь: http://dojotoolkit.org/api/1.7/dojo/data/api/Read
Существует много типов магазинов, ItemFileReadStore - только пример.
Надеюсь, это поможет