0
我試圖循環訪問S3存儲桶中的每1000個元素。這是因爲獲取請求返回的最大數量爲1000個元素。如果有超過1000個元素,則它會分頁,並且get請求將返回字段調用IsTruncated爲true,並將標記(NextMarker)元素傳遞給下一個調用,讓下一個獲取請求在接下來的1000個元素處開始。Javascript全局變量未在回調中修改
我從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>
是的,我已經這樣做了,它實際上打印了正確的值,但它對我沒有多大幫助,因爲我需要在全局環境中更改變量賦值以使我的循環正常工作。 – user3594685
它們是全球性的,因爲它們位於作爲瀏覽器全局對象的窗口對象上,所以它們正在改變。 – adrichman
@ user3594685 - 他們正在改變。直到'$ .get()'函數異步完成(這意味着稍後的某個時間),新值纔會出現。如果你想使用來自Ajax調用的返回結果,你必須在Ajax調用的完成處理程序中使用它,或者通過將使用它的代碼放在那裏,或者從那裏調用一個函數並將數據傳遞給它。你不能像你所做的那樣僅僅從一個全局變量中使用它。如果你打算使用'$ .get()'異步調用,你必須異步編程。 – jfriend00