Javascript jQuery$.each()-问题

Javascript jQuery$.each()-问题,javascript,jquery,each,Javascript,Jquery,Each,我正在制作一个wordpress插件,我有一个导入图像的函数,这是通过一个$.each()-循环完成的,每次迭代调用一个.load()函数。加载函数调用的加载函数页面正在下载图像并返回一个数字。该编号将导入到跨度图元中。正在从隐藏ULs的LI元素导入源阵列和目标阵列 通过这种方式,用户可以看到计数器从零计数到导入的图像总数。您可以在下面使用我的jQuery代码: jQuery(document).ready(function($) { $('#mrc_imp_img').click(f

我正在制作一个wordpress插件,我有一个导入图像的函数,这是通过一个$.each()-循环完成的,每次迭代调用一个.load()函数。加载函数调用的加载函数页面正在下载图像并返回一个数字。该编号将导入到跨度图元中。正在从隐藏ULs的LI元素导入源阵列和目标阵列

通过这种方式,用户可以看到计数器从零计数到导入的图像总数。您可以在下面使用我的jQuery代码:

jQuery(document).ready(function($) {

    $('#mrc_imp_img').click(function(){
    var dstA = [];
    var srcA = [];
    $("#mrc_dst li").each(function() { dstA.push($(this).text()) });
    $("#mrc_src li").each(function() { srcA.push($(this).text()) });

        $.each(srcA, function (i,v) {
            $('#mrc_imgimport span.fc').load('/wp-content/plugins/myplugin/imp.php?num='+i+'&dst='+dstA[i]+'&src='+srcA[i]);
        });

    });


});

这工作得很好,但有时看起来加载函数更新DOM的速度并没有达到应有的速度,因为有时更新范围所用的数字低于上一个数字,并且几乎每次都有一个较低的数字替换最后一个数字。如何防止这种情况发生,以及如何在$。每个循环就绪时隐藏“#mrc_imp_img”?

较早调用的AJAX调用不能保证较早完成,因此较小的数字可以覆盖较大的数字。一种解决方案是在每次成功调用时简单地增加计数器:

jQuery(function($) {
  $('#mrc_imp_img').click(function(){
    var dstList = $("#mrc_dst li");
    var srcList = $("#mrc_src li");
    dstList.each(function(i) { 
      var dst = $(this).text();
      var src = srcList[i].text();
      $.post('/wp-content/plugins/myplugin/imp.php?num='+i+'&dst='+dst+'&src='+src, function() {
        $('#mrc_imgimport span.fc').text($('#mrc_imgimport span.fc').text()+1);
      });
    });
  });
});

(更改代码以避免不必要的数组操作,更改onready调用以使用速记,更改AJAX调用以使用POST,后者应用于更改状态的操作。)

大多数服务器可能运行有限数量的线程。如果您一次发出10个调用,而您的服务器只有5个线程,那么其中5个线程将失败

此外,一旦你最大限度地使用了所有正在运行的线程,其他用户就无法访问服务器,因此你基本上是在关闭服务器

如果您不介意一次只调用一个,请按照Tgr建议的方式序列化调用,等待每个调用完成后再开始下一个调用

我更喜欢尤达的建议。您可以做的是将其转换为一个处理整个阵列的服务器调用。如果您真的想更新计数器客户端,那么一个服务器调用可以更新数据库中的计数器,然后第二个ajax调用可以每隔几秒钟轮询服务器以找出计数器的位置。显然,不能保证是连续的,但对您的服务器健康会更好。您还可以伪造顺序方面(如果您在#3上,下一个调用会在客户端逐个生成一个#6增量it)


至于没有看到警报,在警报行之前或之上可能存在javascript错误。尝试使用firebug和console.log语句,或者甚至更好,使用firebug调试器逐步完成它。

作为建议,我宁愿使用JSON作为返回值在单个ajax请求中获取所有图像数据,而不是按照您的方式。我想您需要提供一点html代码!不清楚整个结构是什么样子!李先生是什么?李先生呢?也许是目的地和来源!?他们为什么分开!?然后,您可能希望首先按顺序执行这些调用(或者按照尤达的建议将它们打包在一起)。同时在服务器上启动大量下载线程是一种资源浪费。谢谢,但我没有让它正常工作。我已在dstList中放置了一个警报(dst)。每个循环,但没有显示警报?像dst和src变量这样的LOK没有正确设置。我曾想过在一个htp请求中完成所有这些操作,但这需要一段时间,我想让som直观地感觉到某些事情正在发生……这并不准确……请求的限制方式差异很大。无论如何,线程不会失败,它们会等待,这是一个巨大的区别。