我懒惰加载我们的页面上的html片段,以提高性能。 jQuery的加载方法不提供对完整ajax api的访问(像错误回调之类的东西),所以我创建了一个更强大的版本。jquery 1.5.1,asp.net和firefox间歇性ajax故障
我在每页上调用这个方法每页3-5次,并且当有一个AJAX调用出现某种错误时记录。我发现大约有0.3%的时间ajax调用失败,大部分失败都在firefox 3.6中。我在ASP.NET服务器端使用jQuery 1.5.1。错误回调的 'errorThrown' 参数读取:
[异常... “组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIXMLHttpRequest.getAllResponseHeaders]” nsresult: “0x80040111(NS_ERROR_NOT_AVAILABLE)”
和jqXHR写着:
{“readyState的”:4,“状态”:0,“状态文本”:“错误”}
我已确认有用户他们正在experienceing这个问题,它不只是僵尸网络或一些记录无经验的错误。
这里是我的 “负荷” 插件的代码
(function ($) {
$.fn.elfLoad = function (url, options) {
return this.each(function() {
var $elem = $(this);
options = $.extend({}, {
type: "GET",
dataType: "html",
data: "",
error: function (jqXHR, status, errorThrown) {
$elem.html('<div class="elf-missing-content centerText">Doh! Something did not go so well when trying to load this content. Please try again later.');
elf.ajax.logInfo("data: " + options.data + " errorThrown: " + errorThrown + " webmethod: " + options.url + "jqXHR: " + JSON.stringify(jqXHR),"elfLoad");
}
}, options);
options.success = function (data, status, jqXHR, responseText) {
responseText = jqXHR.responseText;
if (jqXHR.isResolved()) {
jqXHR.done(function (r) {
responseText = r;
});
$elem.html(responseText);
}
if (options.callback) {
var callbackArgs = {
responseText: responseText,
$elem: $elem,
status: status,
jqXHR: jqXHR
};
$elem.each(options.callback, [callbackArgs]);
}
}
options.url = url;
if (options.data) {
options.data = $.param(options.data, $.ajaxSettings.traditional);
options.type = "POST";
} else {
options.data = "";
}
$.ajax(options);
});
}
})(jQuery);
对它的调用看起来像这样$( '#集装箱')elfLoad( 'url.aspx',{FOO:“酒吧“});
有没有其他人有这个问题?有任何想法吗? jQuery声称最近关闭了一张看起来像1.5.1这样的票,但我看到其他人有类似的问题。 http://bugs.jquery.com/ticket/8400
谢谢!