在javascript ajax调用之后返回false似乎不起作用

时间:2011-09-16 16:17:34

标签: jquery ajax object

好吧,这看起来很荒谬,我知道为什么这种情况在技术上会发生,但必须要有办法解决它!

问题如下:

我有一个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;
};

我在Index页面的脚本块中调用此方法。它在一个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;
    });

  });

如您所见,上面代码中的'return false'被注释掉,并且在'AjaxHandler'对象中发生了返回false。如果我注释掉对象中的那个并取消注释'ready'中的那个,页面就不会闪烁,一切都很好。如果我按原样离开,则页面会闪烁。

我已经研究了这个问题,虽然人们有类似的问题,但似乎是在“实时”设置中直接围绕ajax调用。

有关如何正常工作的任何见解。该对象应该足够通用,可以在我们的tab结构需要ajax的任何实例中使用,因此在方法调用中保持'return false'而不是'live'非常重要。

1 个答案:

答案 0 :(得分:2)

而不是返回false,我建议使用propper jQuery方法。

在你的情况下,这是

e.preventDefault();

如果您坚持使用前面提到的代码,则不需要在两种方法中都返回false,但是您需要在最终方法中返回false。

在这种情况下我要做的是返回提交的结果。

return tabHandler.Submit(); // which is returning false