jQuery .load里面.each

时间:2012-04-04 22:38:00

标签: jquery load each

试图搜索这个,虽然我甚至不确定我在寻找什么。我的问题是:

$.getJSON('process.countfiles.php?action=getfiles', function(data) {
    $.each(data, function(name, value){
        $("#displayfile").load("process.files.php?file="+value, function(){
        });
    });
});

好的,我有一个带有2个函数的脚本(process.countfiles.php),1 - 计算文件并在.dat文件中构建文件列表。然后编号2打开.dat文件并单独处理文件。

第一部分效果很好,所以让我们转到第二部分......我的数据是从PHP传递的:

PHP代码:

$fh = fopen($dirdatafn, "r"); 
    while (!feof($fh)){ 
        $data_file_line[] .= fgets($fh); 
    } 
    @fclose ($fh); 
    echo json_encode($data_file_line); 

现在回到JS(jQuery是我正在使用的框架)数据是来自PHP的$ data_file_line数组,它获取数据没有问题,然后它应该开始用.each分隔它们

问题是,它会尝试同时加载所有7,000+并将它们全部发送到process.files.php,当我希望它一次处理一个。

任何帮助都将不胜感激。

谢谢你, 杰夫

2 个答案:

答案 0 :(得分:1)

如果你使用更通用的$ .ajax()方法而不是$(“selector”),你可以告诉jQuery同步调用"process.files.php?file="。load();

替换

$("#displayfile").load("process.files.php?file="+value, function(){
        });

$.ajax("process.files.php?file="+value, {
        async: false, // this is true by default
        success: function(data) {
            $("#displayfile").html(data); // this is what you were doing by calling $.load
            // do other stuff
        }
     });

答案 1 :(得分:1)

为您提供JSON返回一个数组,您可以这样做(我还没有测试过)。基本上单独处理每个文件需要等到成功回调在处理下一个文件之前触发:

    var data_arr;
    $(function() {
        $.getJSON('process.countfiles.php?action=getfiles', function(data) {
            data_arr = data;
            requestFiles(data_arr[0])
        });
        function requestFiles(i) {

            $("#displayfile").load("process.files.php?file=" + data_arr[i], function() {
                if(i < data_arr.length) {
                    requestFiles(i + 1);
                }
            });
        }

    })