好吧,这看起来很荒谬,我知道为什么这种情况在技术上会发生,但必须要有办法解决它!
问题如下:
我有一个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'非常重要。
答案 0 :(得分:2)
而不是返回false,我建议使用propper jQuery方法。
在你的情况下,这是
e.preventDefault();
如果您坚持使用前面提到的代码,则不需要在两种方法中都返回false,但是您需要在最终方法中返回false。
在这种情况下我要做的是返回提交的结果。
return tabHandler.Submit(); // which is returning false