Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery$.get不返回';每个';顺序正确吗?_Javascript_Html_Jquery - Fatal编程技术网

Javascript jQuery$.get不返回';每个';顺序正确吗?

Javascript jQuery$.get不返回';每个';顺序正确吗?,javascript,html,jquery,Javascript,Html,Jquery,我有一个有8个“条目”的页面。每个.entry都有一个链接fetchLink和一个标题entry title 在fetchLink链接到的页面上,有另一个链接fetchedInfo,我想$。获取,并用作href来包装条目标题 我的代码尝试: var fetchLink; $(".entry").each(function() { fetchLink = $(this).find('a').attr('href');

我有一个有8个“条目”的页面。每个
.entry
都有一个链接
fetchLink
和一个标题
entry title

fetchLink
链接到的页面上,有另一个链接
fetchedInfo
,我想
$。获取
,并用作href来包装
条目标题

我的代码尝试:

    var fetchLink;      

    $(".entry").each(function() {

        fetchLink = $(this).find('a').attr('href');         
        
        $.get(fetchLink, function(res) {
           var fetchedInfo = ($(res).find(".g1-cta-button-wrap a").attr("href"));
           console.log(fetchedInfo);                
           $(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>');                
        });

    });
请注意,在我的实际代码中,我会:

fetchLink = $(this).find(".entry-comments-link").find('a').attr('href'); 
由于comments链接是我需要用于$.get的链接,因此结果是“无序的”,因为get是异步的。如果结果的显示顺序很重要,则在解决前一个get之前,不应尝试进行另一个get。对你来说,我认为这不重要。你应该期望看到结果在他们到达时出现

只有第一个条目标题被包装的原因是因为你要它这么做。您需要创建对正在处理的当前对象的引用。因此jQuery中的第一行应该是

const $this = $(this)
而不是

$(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(“.entry title”).wrap(“”)
你应该这样做

$(this).find(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(this.find(“.entry title”).wrap(“”)
这将使jQuery只包装当前正在处理的条目的条目标题

第一点的补充:每个
get()
都会触发对某个端点的新请求,并消耗服务器的一部分带宽。你在问题中说你有8个条目。这是我将考虑发送到我自己的服务器的请求数量的上端。最好配置您的站点,以便您可以一次检索所有信息,或者如果您最终有超过8个条目或性能问题,则创建一个一次只请求一件事情的排队过程。

由于get是异步的,因此结果是“无序的”。如果结果的显示顺序很重要,则在解决前一个get之前,不应尝试进行另一个get。对你来说,我认为这不重要。你应该期望看到结果在他们到达时出现

只有第一个条目标题被包装的原因是因为你要它这么做。您需要创建对正在处理的当前对象的引用。因此jQuery中的第一行应该是

const $this = $(this)
而不是

$(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(“.entry title”).wrap(“”)
你应该这样做

$(this).find(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(this.find(“.entry title”).wrap(“”)
这将使jQuery只包装当前正在处理的条目的条目标题


第一点的补充:每个
get()
都会触发对某个端点的新请求,并消耗服务器的一部分带宽。你在问题中说你有8个条目。这是我将考虑发送到我自己的服务器的请求数量的上端。最好配置您的站点,以便您可以一次检索所有信息,或者,如果您最终有8个以上的条目或性能问题,创建一个一次只请求一件事情的排队过程。

您没有限定要包装哪个
。条目标题
,因此每次GET请求完成时,都要包装所有条目

围绕匹配元素集中的每个元素包装一个HTML结构

不清楚,因为您没有提供任何HTML,但是如果每个
.entry title
都存在于您正在迭代的
.entry
中,请尝试以下操作

$(“.entry”)。每个(函数(){
常量条目=$(此)
const fetchLink=entry.find('a').attr('href'))
const entryTitle=entry.find('.entry title')//在此.entry中查找.entry title
$.get(fetchLink,res=>{
const href=$(res).find(“.g1 cta按钮包装a”).attr(“href”)
console.log(href)
entryTitle.wrap($('',{href}))
},'html')
})

控制台将在请求完成时记录每个HREF。这可能以任何顺序发生,但至少现在,您将只在每个
条目中更改文档
您没有限定要包装哪个
.entry title
条目,因此每次GET请求完成时,它都会包装所有条目

围绕匹配元素集中的每个元素包装一个HTML结构

不清楚,因为您没有提供任何HTML,但是如果每个
.entry title
都存在于您正在迭代的
.entry
中,请尝试以下操作

$(“.entry”)。每个(函数(){
常量条目=$(此)
const fetchLink=entry.find('a').attr('href'))
const entryTitle=entry.find('.entry title')//在此.entry中查找.entry title
$.get(fetchLink,res=>{
const href=$(res).find(“.g1 cta按钮包装a”).attr(“href”)
console.log(href)
entryTitle.wrap($('',{href}))
},'html')
})

控制台将在请求完成时记录每个HREF。这可能以任何顺序发生,但至少现在,您将只更改每个
.entry

中的文档。这就是异步调用的工作方式。提供HTML结构将大大有助于解决此问题。我现在添加了实际的HTML。唯一需要注意的是,为了简化我的问题,我编写了
fetchLink=$(this.find('a').attr('href')而不是我代码中的实际内容,即
fetchLink=$(this.find(.entry comments link”).find('a').attr('href')这就是异步调用的工作原理提供HTML结构将大大有助于解决此问题我现在添加了实际的HTML。唯一需要注意的是,为了简化我的问题,我编写了
fetchLink=$(this.find('a').attr('href')而不是我代码中的实际内容,即
fetchLink=$(this.find(.entry comments link”).find('a').attr('href')
小心,在
$回调中,
将不再引用
.en