[英]JavaScript says a defined variable inside of an Object is undefined
我一直在找我在這里找到的Ajax上傳教程。 我正在嘗試檢查服務器是否返回"error"
作為狀態。 我發現了,它是data.result
。 當我做console.log(data)
時data
定義, result
是{"status":"error"}
如預期,但是當我嘗試調用data.result
在同一個函數,它返回undefined。 我嘗試了所有操作,在未定義全局變量時將其定義,甚至將其傳遞給另一個函數。 這是我所擁有的:
progress: function(e, data){
// calc the completion percentage of the upload
var progress = parseInt(data.loaded / data.total * 100, 10);
console.log(data);
/* console log:
Object {disabled: false, create: null, dropZone: b.fn.b.init[1], pasteZone: b.fn.b.init[1], replaceFileInput: true…}
(more values)
result: "{"status":"error"}"
(more values)
*/
// update hidden input field and trigger a change
data.context.find('input').val(progress).change();
if(progress == 100){
updateProgress(data);
}
},
// ... later on in the file ...
function updateProgress(data){
console.log(data);
if(JSON.parse(data.result).status === 'error'){
data.context.addClass('error');
}else{
data.context.removeClass('working');
$('#drop').fadeOut(function(){
$('#drop').remove();
if(debug === 0){window.location = 'http://datastorage.iquestria.net/images/'+data.files[0].name+'?v2';}
});
}
}
經過大量討論之后,最終的問題是data.result
僅在done
回調中可靠地提供,而在OP試圖訪問它的progress
回調中則沒有。
您的Ajax調用的結果只能在提供數據的回調中使用。 您無法在其他任何地方使用它。 這是因為回調是異步調用的,並且在函數的其余部分完成之后的某個時候結束。
請參閱以下答案以獲取更多詳細信息: 如何返回異步調用的響應?
此外,如果您正確使用了jQuery的ajax調用,則您無需進行任何JSON解析,因為jQuery會為您完成所有這些工作。 我不太清楚您得到的結果是什么,但是如果您為ajax調用指定正確的數據結果類型,則jQuery會自動為您解析它,而您不必調用JSON.parse()
你自己。
看你的代碼看起來像
JSON.parse(data.result).status
應該
JSON.parse(data).result.status
如果“結果”是JSON響應的一部分。 就像您的JSON是result: {"status":"error"}
result
在解析data
之前將不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.