Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
回调中未修改Javascript全局变量_Javascript_Amazon Web Services - Fatal编程技术网

回调中未修改Javascript全局变量

回调中未修改Javascript全局变量,javascript,amazon-web-services,Javascript,Amazon Web Services,我正在尝试循环S3存储桶中的每1000个元素。这是因为get请求最多返回1000个元素。如果有超过1000个元素,它将被分页,get请求返回一个字段调用IsTruncated为true,并返回一个marker(NextMarker)元素以传递给下一个调用,让下一个get请求在下一个1000个元素开始 我将从get请求中获取数据作为回调函数中的参数,并尝试将上述两条信息存储在全局变量中,以便在外部循环中使用。但是,外部循环变为无穷大,因为在我的get请求回调函数中从未修改过全局变量。我尝试在回调中

我正在尝试循环S3存储桶中的每1000个元素。这是因为get请求最多返回1000个元素。如果有超过1000个元素,它将被分页,get请求返回一个字段调用IsTruncated为true,并返回一个marker(NextMarker)元素以传递给下一个调用,让下一个get请求在下一个1000个元素开始

我将从get请求中获取数据作为回调函数中的参数,并尝试将上述两条信息存储在全局变量中,以便在外部循环中使用。但是,外部循环变为无穷大,因为在我的get请求回调函数中从未修改过全局变量。我尝试在回调中使用window.variable,但没有效果。有人能帮我重组代码以实现我的目标吗

谢谢

出于调试目的,Outter循环被注释掉。我使用了许多调试console.log语句来确定问题的根源

               <script type="text/javascript">
                    s3_bucket = "link_to_s3_bucket";
                    var go = true;
                    var marker = "";
                    //while(go){
                            console.log('pass');
                            console.log(s3_bucket + marker);
                            $.get(
                                    s3_bucket+marker,
                                    "{}",
                                    function(data) {
                                            $(data).find('Key').each(function(i, key) {
                                                    key = key.innerHTML;
                                                    $("<a />", {
                                                            href : s3_bucket+key,
                                                            text : key
                                                    }).prependTo("#links");
                                            $("<br />").prependTo("#links");
                                            });
                                            window.go = $(data).find('IsTruncated')[0].innerHTML;
                                            window.marker = "&marker=" + $(data).find('NextMarker')[0].innerHTML;
                                    },
                                    "xml"
                            );
                    //}
                    console.log(go);
                    console.log(marker);

            </script>

s3_bucket=“链接到s3_bucket”;
var go=真;
var标记=”;
//while(go){
console.log('pass');
控制台日志(s3_桶+标记器);
美元(
s3_铲斗+标记器,
"{}",
功能(数据){
$(数据)。查找('Key')。每个(函数(i,Key){
key=key.innerHTML;
$("", {
href:s3_bucket+键,
文本:键
}).prependTo(“链接”);
$(“
”).prependTo(“#链接”); }); window.go=$(数据).find('IsTruncated')[0].innerHTML; window.marker=“&marker=“+$(数据)。查找('NextMarker')[0]。innerHTML; }, “xml” ); //} 控制台日志(go); 控制台日志(标记器);
您的数据从Amazon异步返回,因此在调用这些控制台日志时,这些变量尚未定义。在变量赋值之后,将控制台日志放在回调中。

是的,我已经这样做了,它确实打印了正确的值,但是,这对我没有多大帮助,因为我需要在全局上下文中更改变量assingments以使循环正常工作。它们是全局的,因为它们位于作为浏览器全局对象的窗口对象上,所以它们正在更改。@user3594685-它们正在更改。直到
$.get()
函数异步完成(这意味着稍后的某个时间),新值才会出现。如果要使用Ajax调用的返回结果,必须从Ajax调用的完成处理程序使用它,方法是将使用它的代码放在那里,或者从那里调用函数并将数据传递给它。不能像现在这样从全局变量使用它。如果要使用异步调用,如
$.get()
,则必须异步编程。他可以从全局变量使用它。但在请求返回之前,它将是未定义的。