$ .ajax не загружает данные каждый раз с сервера - PullRequest
1 голос
/ 03 апреля 2010

Я написал простую функцию jQuery.ajax, которая загружает пользовательский элемент управления с сервера одним нажатием кнопки. Первый раз, когда я нажимаю кнопку, она идет на сервер и получает пользовательский контроль. Но каждое последующее нажатие на ту же кнопку не идет на сервер, чтобы получить мне пользовательский элемент управления.

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


$("#btnLoad").click(function() {
    if ($(this).attr("value") == "Load Control") {
 $.ajax({
  url: "AJAXHandler.ashx",
  data: { "lt": "loadcontrol" },
  dataType: "html",
  success: function(data) {
   content.html(data);
  }
 });
 $(this).attr("value", "Unload Control");
    }
    else {
 $.ajax({
  url: "AJAXHandler.ashx",
  data: { "lt": "unloadcontrol" },
  dataType: "html",
  success: function(data) {
   content.html(data);
  }
 });
 $(this).attr("value", "Load Control");
    }
});

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

Ответы [ 2 ]

2 голосов
/ 03 апреля 2010

Добавьте свойство cache со значением false к объектам, которые вы передаете jQuery.ajax.

 $.ajax({
  url: "AJAXHandler.ashx",
  cache: false,
  data: { "lt": "loadcontrol" },
  dataType: "html",
  success: function(data) {
   content.html(data);
  }
 });

Вы можете установить это глобально:

jQuery.ajaxSetup({
    cache: false
});

jQuery по умолчанию будет использовать кэшированные ответы для всего, кроме SCRIPT / JSONP.

1 голос
/ 03 апреля 2010

Если ваш btnLoad находится внутри пользовательского элемента управления, который вы загружаете, вам нужно сделать это вместо этого:

$("#btnLoad").live('click', function() {

При загрузке ajax вы заменяете элементы и любые обработчики событий, связанные непосредственно с ними. Если вместо этого вы используете .live(), он не будет уничтожен как часть обратного вызова ... он работает по-другому, и обработчик событий живет выше в DOM, поэтому он не получает уведомления о сама кнопка.

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