我有一个搜索结果页面,并且在页面准备就绪时,我有 ajax GET 来预先请求每个结果项 url,以便预先缓存这些页面。
例如。
$('.link').each(function(){
$.get($(this).attr('href'));
});
抛开这是否是正确方法的争论,我如何在 jQuery 中发出请求页面的 ajax GET 请求,等待状态代码更改然后中止请求(换句话说,不需要接收内容)?
我遇到过这篇文章,但我不知道如何将其合并到 jQuery GET 函数中。
也许您正在寻找一个同步的 AJAX 调用。您的脚本将等待请求完成,然后才能继续运行。然后您可以检查status
AJAX 对象的属性。
var ajaxCall = $.ajax({
type: "GET",
async:false,
url: "server.php",
data: "name=James&location=Auckland",
});
if (ajaxCall.status == 200){
// request executed successfully
}
异步
默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false。
如果您想在发送 AJAX 调用后简单地中止它。您也许可以使用该abort()
功能。您可能会发现AJAX 对象的其他属性很有用。
var ajaxCall = $.ajax({
type: "GET",
url: "server.php",
data: "name=James&location=Auckland",
success: function(response){
alert( "Response: " + response );
}
});
//abort the request
ajaxCall.abort();
如果您只想触发 AJAX 请求并处理 statusCode 更改,则此代码可能很有用。
$.ajax({
statusCode: {
200: function() {
alert("request successful");
}
}
});
200
此回调在设置状态代码时触发- 一个完整的请求。您可以将此代码更改为您要检测的任何状态代码。在该回调中,您可以调用该abort()
函数。
我要做的是:
var $page = $('<div>').load('/somepage body', function() {
// code to do something when its loaded
});
如果您不放置选择器,它将在其中触发脚本。您也可以这样做,但您必须相应地编写脚本。
但要回答您的具体问题:
var pages = [];
function allLoaded() {
console.log('all pages loaded');
}
$('.link').each(function(){
var $page = $('<div>'), href = $(this).attr('href');
$page.load(href + ' body', function() {
pages.push({href: href, html : $page.html()});
if (pages.length === $('.link').length) {
allLoaded();
}
}
});
你不只是喜欢闭包吗?
如果这个问题的最终目标是发出请求,获取 url 的状态,然后不下载内容,那么最好的办法是不要覆盖 AJAX GET HTTP 方法,而是使用 HEAD HTTP 方法。
堆栈溢出:
JQuery Docs(查看“类型”属性):