Возврат false после вызова javascript ajax, похоже, не работает - PullRequest
1 голос
/ 16 сентября 2011

Хорошо, это кажется смешным, и я знаю, ПОЧЕМУ это происходит технически, но должен быть способ обойти это!

Проблема заключается в следующем:

У меня есть объект javascriptчто после создания вы можете вызвать метод, и он отправит запрос ajax, и они вернут false.Код объекта находится в другом файле.

Вот объект:

function AjaxHandler(groupid, typeid, currentLocation, controllerUrl) {
  this.groupId = groupid || 0;
  this.typeId = typeid || 0;
  this.href = currentLocation || '';
  this.method = controllerUrl;
}

AjaxHandler.prototype.Submit = function () {
  var queryString = this.href.split('?')[1];
  var newHref = this.method;

  if (queryString != null && queryString != undefined)
    newHref = newHref + "?" + queryString

  $.ajax({
    type: "post",
    url: newHref,
    contentType: "application/x-www-form-urlencoded",
    error: function (xhr, type, exception) {
      console.log("Error occurred in AjaxHandler.Submit. Type: " + type + " Exception: " + exception);
    }
  });

  return false;
};

Я вызываю этот метод в блоке скрипта на странице индекса.Он вызывается в jquery 'live', который настраивается во время .ready.Вот код .ready:

$(document).ready(function () {
    SetShowMoreResultsFeatures();

    $(".tabs a").live('click', function (e) {
      var href = $(this).attr('href');
      var queryString = href.split('?')[1];
      var queryStringValue = '';

      if (queryString != null)
        queryStringValue = queryString.split('=')[1];

      var tabHandler = new AjaxHandler(null, queryStringValue, href, '/home/GetCasesByType');
      tabHandler.Submit();

      //return false;
    });

  });

Как вы можете видеть, возвращаемое значение false в приведенном выше коде закомментировано, и в объекте AjaxHandler возникает возвращаемое значение false.Если я закомментирую тот, который находится в объекте, и раскомментирую тот, что в «готово», страница не мигает, и все в порядке.Если я оставлю это так, как есть, то страница начнет мигать.

Я исследовал это, и, хотя у людей есть похожие проблемы, кажется, что все окружает вызов ajax непосредственно в «живой» настройке.

Любое понимание того, как сделать эту работу правильно.Предполагается, что этот объект достаточно универсален, чтобы использовать его в любом случае, когда для нашей структуры вкладок необходим ajax, поэтому важно сохранять в вызове метода return false, а не live.

1 Ответ

2 голосов
/ 16 сентября 2011

Вместо того, чтобы возвращать false, я бы порекомендовал использовать для этого метод propper jQuery.

В вашем случае это

e.preventDefault();

Если бы вы придерживались упомянутого выше кода, вам не нужно возвращать false в обоих методах, но вам нужно будет возвращать false в конечном методе.

В этом случае я бы вернул результат вызова для отправки.

return tabHandler.Submit(); // which is returning false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...