JQuery - хранение ответа ajax в глобальную переменную - PullRequest
64 голосов
/ 25 мая 2009

Я все еще новичок в jQuery и сцене ajax, но у меня есть запрос $ .ajax, выполняющий GET для получения некоторых файлов XML (~ 6 КБ или меньше), однако на время, которое пользователь тратит на этой странице, что Содержимое XML не должно / не будет изменяться (этот дизайн я не могу изменить, у меня также нет доступа к изменению файла XML, поскольку я читаю его откуда-то еще). Поэтому у меня есть глобальная переменная, в которой я храню данные ответов, и любые последующие просмотры данных выполняются для этой переменной, поэтому не нужно выполнять несколько запросов.

Учитывая тот факт, что XML-файл может увеличиваться, я не уверен, что это лучшая практика, а также, исходя из опыта Java, мои мысли о глобальных публичных переменных, как правило, отрицательные.

Итак, у меня есть вопрос, может ли быть лучший способ сделать это, и вопрос о том, вызывает ли это какие-либо проблемы с памятью, если файл расширяется до какого-то нелепого размера файла?

Я полагаю, что данные могут быть переданы в некоторые функции типа getter / setter внутри объекта xml, что решило бы мои проблемы с глобальными открытыми переменными, но все же поднимает вопрос о том, должен ли я хранить ответ внутри самого объекта.

Например, что я сейчас делаю:

// top of code
var xml;
// get the file
$.ajax({
  type: "GET",
  url: "test.xml",
  dataType: "xml",
  success : function(data) {
    xml = data;
  }
});
// at a later stage do something with the 'xml' object
var foo = $(xml).find('something').attr('somethingElse');

Ответы [ 14 ]

0 голосов
/ 26 августа 2011

Я знаю, что ветка старая, но я подумал, что кто-то еще может найти это полезным. По данным jquey.com

var bodyContent = $.ajax({
  url: "script.php",
  global: false,
  type: "POST",
  data: "name=value",
  dataType: "html",
  async:false,
  success: function(msg){
     alert(msg);
  }
}).responseText;

поможет получить результат в строку напрямую. Обратите внимание на .responseText; part.

0 голосов
/ 25 мая 2009

.get ответы кэшируются по умолчанию. Поэтому вам действительно ничего не нужно делать, чтобы получить желаемые результаты.

0 голосов
/ 25 мая 2009

Я бы посоветовал избегать выборки больших XML-файлов с сервера: переменная "xml" должна использоваться как кеш , а не как само хранилище данных.

В большинстве сценариев можно проверить кэш и посмотреть, нужно ли отправлять запрос на сервер для получения нужных вам данных. Это сделает ваше приложение легче и быстрее.

ура, мл.

0 голосов
/ 25 мая 2009

IMO вы можете хранить эти данные в глобальной переменной. Но будет лучше использовать более уникальное имя или использовать пространство имен:

MyCompany = {};

...
MyCompany.cachedData = data;

А также для этих целей лучше использовать json, данные в формате json обычно намного меньше, чем те же данные в формате xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...