Javascript 我能';可以说,我没有得到任何结论

Javascript 我能';可以说,我没有得到任何结论,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我知道这类问题以前已经被问过一千次了,我读了很多关于这方面的帖子,但我还是无法理解。在这里发布之前,我自己尝试了很多例子,但都没有成功 我基本上是尝试从不同的文件夹返回图像,但我需要以特定的方式分别处理每个目录中的图像。一般来说,我对json和ajax不是很熟悉,所以这可能就是我不太理解的原因 无论如何,我的想法是简单地创建一个for循环,然后对于每个目录,通过ajax获取图像并处理它们 显然,这并没有像我预期的那样工作,我在某个地方读到,我需要一个javascript“闭包”来让它工作,但它从

我知道这类问题以前已经被问过一千次了,我读了很多关于这方面的帖子,但我还是无法理解。在这里发布之前,我自己尝试了很多例子,但都没有成功

我基本上是尝试从不同的文件夹返回图像,但我需要以特定的方式分别处理每个目录中的图像。一般来说,我对json和ajax不是很熟悉,所以这可能就是我不太理解的原因

无论如何,我的想法是简单地创建一个for循环,然后对于每个目录,通过ajax获取图像并处理它们

显然,这并没有像我预期的那样工作,我在某个地方读到,我需要一个javascript“闭包”来让它工作,但它从来没有工作过。以下是我的基本代码,没有闭包:

$.getJSON('/img/content/galleries/', function(directories) {
    for (var dirnum = 2; dirnum < directories.length - 1; dirnum++) {
        var folder = '/img/content/galleries/' + directories[dirnum] + '/';

        $.ajax({
            url: folder,
            success: function(data) {
                    $("#gallery").text("");
                    $(data).find("a").attr("href", function(i, val) {
                        if (val.match(/\.jpg|\.png|\.gif/)) {
                            $("#gallery").append("<img src='" + folder + val + "'>");
                        }
                    }); // end data.find
                } // end success
        }); // end ajax

    } // end for loop


}); // end getJSON
$.getJSON('/img/content/gallers/',函数(目录){
for(var dirnum=2;dirnum
这段代码运行,但总是在gallery1(我的目录名)之前给我gallery2的结果,然后给出一个错误,说它在gallery2文件夹中找不到gallery1中的图像

如果有人能帮我在这里插入某种闭包,那就太好了。已经浪费了几个小时,到目前为止没有结果。我只是不明白这个概念

还请注意,我之前从gallery1和gallery 2中父文件夹中的php文件中获取了“目录”值,其中包含该代码:

<?php
$directories = scandir('.');
header('Content-Type: application/json');
echo json_encode($directories);
?>

或者,如果你们认为有一种更简单的方法可以在javascript中实现这一点,我洗耳恭听!我知道我可以用php和一些javascript混合使用的另一种方式来实现,但我只想在这里使用javascript

先谢谢你


Erick p.

主要缺陷是每个请求都会清空容器。。。因此,仅显示上次收到的请求的内容

通过在请求循环开始之前清空容器来修复此问题

您无法控制收到的请求的顺序。。。因此,如果顺序很重要,则需要对请求使用承诺,以确保以正确的顺序填充数据

$.getJSON('/img/content/galleries/', function(directories) {

    //empty container before starting request loop
    $("#gallery").empty(); 



    for (var dirnum = 2; dirnum < directories.length - 1; dirnum++) {


   // wrap ajax in IIFE closure
    (function(dirnum){

     var folder = '/img/content/galleries/' + directories[dirnum] + '/';

        $.ajax({
            url: folder,
            success: function(data) {
                    //$("#gallery").text("");// move up above loop
                    $(data).find("a").attr("href", function(i, val) {
                        if (val.match(/\.jpg|\.png|\.gif/)) {
                            $("#gallery").append("<img src='" + folder + val + "'>");
                        }
                    }); // end data.find
                } // end success
        }); // end ajax


     })(dirnum);//end closure in for loop

    } // end for loop


}); // end getJSON
$.getJSON('/img/content/gallers/',函数(目录){
//启动请求循环之前清空容器
$(“#图库”).empty();
for(var dirnum=2;dirnum

不太清楚为什么从
dirnum
的第三个索引开始……假设
目录中有不需要的路径。在服务器上过滤这些内容会更干净

感谢Charlie的帮助!我通过闭包修复了它,每个人都告诉我:

$.getJSON('/img/content/galleries/', function(directories) {
    $("#gallery").text("");
    for (var dirnum = 2; dirnum < directories.length - 1; dirnum++) {
        (function(dirnum) {
            var folder = '/img/content/galleries/' + directories[dirnum] + '/';
            $.ajax({
                url: folder,
                success: function(data) {
                        $(data).find("a").attr("href", function(i, val) {
                            if (val.match(/\.jpg|\.png|\.gif/)) {
                                $("#gallery").append("<img src='" + folder + val + "'>");
                            }
                        }); // end data.find
                    } // end success
            }); // end ajax
        })(dirnum);
    } // end for loop
}); // end getJSON
$.getJSON('/img/content/gallers/',函数(目录){
$(“#图库”)。文本(“”);
for(var dirnum=2;dirnum
查理,我也会尝试你的解决方案,作为另一种选择。再次感谢


埃里克

谢谢你,查理。我真是太傻了。真不敢相信我没看到这个。虽然这回答了部分问题,但我仍然有一些链接从错误的目录中拍照的问题。我确实认为,如果我尝试一些我以前尝试过的“闭包”,它现在可能会起作用。我看看我会怎么做。