Вместо
:include_blank => true
Попробуйте
:include_blank => "your text here"
, если это то, что вы ищете.
Нет другого выхода, кроме как хранить. Подкачка памяти должна уменьшить потенциальные проблемы.
Я бы посоветовал вместо использования глобальной переменной с именем 'xml' сделать что-то вроде этого:
var dataStore = (function(){
var xml;
$.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
success : function(data) {
xml = data;
}
});
return {getXml : function()
{
if (xml) return xml;
// else show some error that it isn't loaded yet;
}};
})();
, а затем получить к ней доступ с помощью:
$(dataStore.getXml()).find('something').attr('somethingElse');
По умолчанию ответы .get кэшируются. Поэтому вам действительно не нужно ничего делать, чтобы получить желаемый результат.
Я бы посоветовал избегать получения больших файлов XML с сервера: переменная «xml» должна использоваться как кеш , а не как само хранилище данных .
В большинстве сценариев можно изучить кэш и посмотреть, нужно ли делать запрос к серверу, чтобы получить нужные данные. Это сделает ваше приложение легче и быстрее.
Ура, младший.
IMO вы можете хранить эти данные в глобальной переменной. Но лучше будет использовать более уникальное имя или пространство имен:
MyCompany = {};
...
MyCompany.cachedData = data;
А также для этих целей лучше использовать json, данные в формате json обычно намного меньше, чем такие же данные в формате xml.
Вот функция, которая неплохо справляется со своей задачей. Я не смог заставить работать лучший ответ, приведенный выше.
jQuery.extend({
getValues: function(url) {
var result = null;
$.ajax({
url: url,
type: 'get',
dataType: 'xml',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
});
Затем, чтобы получить к нему доступ, создайте такую переменную:
var results = $.getValues("url string");