当前位置:  开发笔记 > 编程语言 > 正文

如何在JQuery $ .each函数中编辑全局变量?

如何解决《如何在JQuery$.each函数中编辑全局变量?》经验,为你挑选了1个好方法。

好的,所以标题可能不能很好地解释我的问题.希望这是有道理的.这也是我用jQuery的第一个应用程序,所以请原谅我,如果我做的事情是愚蠢的.

我有以下功能:

function getRandomImages(limit) {
    imagesArray = new Array();
    $.getJSON('createImageArray.php', {limit: limit}, function(data) {
        $.each(data, function(i) {
            imagesArray[i] = data[i];  //imagesArray is declared globally.
        });
    }); 
}

getJSON正确地抓取JSON对象.它返回如下内容:

{"image0":"images/19.10.FBB9.jpg","image1":"images/8.16.94070.jpg","image2":"images/8.14.47683.jpg","image3":"images/8.15.99404.jpg","image4":"images/8.13.20680.jpg","image5":"images/21.12.9A.jpg","image6":"images/8.17.75303.jpg"}

我正在调试并确信data [i]正确包含从JSON对象中获取的图像路径.但是,在调用getRandomImages()之后,我会查看我的全局imagesArray并注意到没有任何更改.我猜它正在创建imagesArray的副本,而不是抓住实际的.

有人可以告诉我我需要做什么,以便我的全局imagesArray在$ .each块中更新?我是否需要以某种方式通过引用传递imagesArray?对不起,我有点迷路了.

谢谢您的帮助.

编辑:一些背景信息.我正在从DB填充一组随机图像位置.我不想一次将db中的所有图像加载到一个数组中,因为它太多了.所以,我有一个计数器,可以跟踪我在图像数组中的位置.完成图像后,我将指针移动到下一个图像.如果我到达终点,我需要抓取更多随机图像.这就是调用上面的js函数的地方; 它调用createImageArray.php,它从db中抓取x个随机图像并返回一个数组.然后我想将这些图像位置存储在我的全局imagesArray中.

我不确定如何重构我的代码以考虑.getJSON的asynchronouos性质.



1> kgiannakakis..:

这里发生的getJSON是异步调用.因此函数立即返回,并且稍后在某个时刻调用其中的代码.只有到那时才会更新imagesArray.

你可以让getJSON同步运行,但我不推荐它.相反,我建议重构代码以考虑AJAX请求的异步性质.

编辑:要进行同步请求,请使用async选项(链接).使用常规$.ajax功能或设置AJAX全局选项.我不建议这样做的原因是,它锁定了浏览器.如果您的服务器未能及时响应,则用户将无法使用他/她的浏览器.

重构代码并不困难.只需在回调函数中移动处理图像数组的逻辑.例如,而不是:

function getRandomImages(limit) {
    imagesArray = new Array();
    $.getJSON('createImageArray.php', {limit: limit}, function(data) {
        $.each(data, function(i) {
                imagesArray[i] = data[i];  //imagesArray is declared globally.
        });
    }); 
   processImages();
}

function getRandomImages(limit) {
    imagesArray = new Array();
    $.getJSON('createImageArray.php', {limit: limit}, function(data) {
        $.each(data, function(i) {
                imagesArray[i] = data[i];  //imagesArray is declared globally.
        });
        processImages();
    }); 
}

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有