2016-07-30 26 views
0

我想建立一个jQuery每个循环与ajax调用,但由于某种原因,它不会停止执行,从而循环我的所有代码。这个jquery每个都有什么问题?

我在这里做错了什么?

的每一个循环:

$.each(JSEFileNames, function(key, value){ 
    $.ajax({ url: "/"+key, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     return; 
     } 
    }); 
    }); 

JSEFileNames含有类似

JSEFileNames= { 
"index.php": "", 
"something.txt": "" 
} 

东西,JSEPlaceholder只是包含 “#searchBox” 的字符串。

这是全码: https://jsbin.com/kifisameto/edit?html,js,output

+0

报价是错误地放在JSEFileNames – KillianC

+0

@Killian这不是问题,但只是在写错问题。如果这是问题,代码根本无法运行。 – nicael

+0

@nicael正确,不好意思!我更新了代码。 –

回答

0

注意,return是没有意义的,因为它是函数的最后一行了。它只会退出这个功能,但$.each将继续执行,因为它包含在另一个函数中。

这是,如果你打破你的代码会发生什么:

$.each(JSEFileNames, ajaxFunction); 

function ajaxFunction(key, value){ 
    $.ajax({ url: "/"+key, success: successFunction }); 
} 

function successFunction(r) { 
    $(JSEPlaceholder).html(r); 
    JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
    $(JSEPlaceholder).empty(); 
    return; 
} 

在这里你可以看到,return不是做你想要做的事。您需要在ajaxFunction呼叫中执行return false才能停止呼叫。这是你如何能做到这一个例子:

$.each(JSEFileNames, function(key, value){ 
    cont = true; 
    $.ajax({ url: "/"+key, async: false, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     cont = false; 
     } 
    }); 
    return cont; 
}); 

这里发生的事情是一个return valuevalue评估,以false将停止jQuery的循环;如果valuetrue,循环将继续运行。官方文档见here

请注意,我添加了async: false;的确,$.ajax是一个异步函数,并且它会在cont之前被返回。只有在请求成功或失败后,底层调用才会被处理。一种解决方法是使请求同步,但它会阻止其他代码在此期间执行。这可能是您在这里寻找的内容,因为您可以在多个页面上显示搜索结果,并且不希望一次搜索所有页面,而是一个接一个地检查它们。

+0

对不起,它仍然不起作用。反正好想。 –

+0

你可以在此扩展吗?究竟发生了什么,期望的输出是什么? – pie3636

+0

https://jsbin.com/kifisameto/edit?html,js,output这可能会有所帮助。 –