簡體   English   中英

JavaScript說對象內部的已定義變量未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM