Uncaught TypeError: Невозможно прочитать свойство 'SPAN_ID' из неопределенного в jquery - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть ответ, в котором я получаю datalist как [], а его ошибка появляется как

Uncaught TypeError: Невозможно прочитать свойство 'SPAN_ID' из неопределенного

Ниже приведен код

function GETSPANINFO(PARAM) {
    try {
        showLoading();
        $(spandetailsdiv).hide();
        var SpanType = $(spantypeid + ' option:selected').val().toUpperCase();
        var SPANID = "";
        var NE_LEG = 0;
        var PL_LEG = 0;
        Values = PARAM;
        $.ajax({
            type: "POST",
            url: AppConfig.PrefixURL + "App/GetSPANInfo",
            data: JSON.stringify(Values),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (response) {
                hideLoading();
                var datalist = JSON.parse(response);

                //$.each(datalist.Table, function (index, element) {
                //    spanid = element.SPAN_ID;
                //    NE_LEG = element.NE_LENGTH;
                //});
                //printRouteHistory(response, NE_LEG);
                if (SpanType == 'FTTX') {
                    $('#dvCTRouteAcceptedPendingFTTX').hide();
                    spanid = datalist[0].SPAN_ID;
                    NE_LEG = parseFloat(datalist[0].NE_LENGTH).toFixed(3);
                    //var COM_LEG = parseFloat(datalist[0].COMM).toFixed(3);
                    var UG_LEG = parseFloat(datalist[0].UGLEG).toFixed(3);
                    var AR_LEG = parseFloat(datalist[0].ARLEG).toFixed(3);
                    var MDU_LEG = parseFloat(datalist[0].MDULEG).toFixed(3);
                    fn = true;
                    $(spandetailsdiv + ' div.header h2').html(spanid);
                    $('#spnfsaid').html(spanid);
                    // $(spnfsaid).html(spanid);    
                    $('#spnfsalength').html(NE_LEG);

                    // $(pendingSpanLen).html(NE_LEG);
                    $('#UGLEG_txt').val(UG_LEG);
                    $('#ARLEG_txt').val(AR_LEG);
                    //$('#MDU_txt').val(MDU_LEG);
                    $('#MDULEG_txt').val(MDU_LEG);
                   $('#ctfsadatepicker').val(datalist[0].HOTODATE);
                  // $('#ctfsadatepickerParfttx').val(datalist[0].HOTODATE); 

                   $('#ddlmissingabd1').show();

                } else {

                    $('#dvConstructionDetails').show();
                    $('#dvConstructionDetails_fttx').hide();
                    $('#dvFiberEngDetails_fttx').hide();          
                   // $('#btnSubmitCT').show();

                    $('#ddlmissingabd1').hide();

                    spanid = datalist[0].SPAN_ID || 0;   // here is the error
                    NE_LEG = datalist[0].NE_LENGTH || 0;  

                    fn = true;
                    $(spandetailsdiv + ' div.header h2').html(spanid);
                    $(spnLinkId).html(spanid);
                    $(spnspanlength).html(NE_LEG);
                    $(pendingSpanLen).html(NE_LEG);
                    //$('#dvConstructionDetails').show();
                }
            },
            error: function (response) {
                hideLoading();
                AppLog.getLogger('error', response.toString());
            },

            complete: function () {
                $(spandetailsdiv).show();
                $('#dvConstructionPendingDetails').hide();
                $('#dvConstuctionRejectDetails').hide();
                $('#PendingForm_FTTx').hide();
                $('#btnPendingSubmitCT').show();

                if (SpanType == 'FTTX') {
                    $('#dvConstructionDetails').hide();
                    $('#dvConstructionDetails_fttx').show(); 
                    $('#dvConstructionPendingDetails_FTTx').hide();                      
                    $('#dvFiberEngDetails_fttx').hide();                                                //ashwini 
                    $('#btnSubmitCTfttx').show();                   
                    
                    //ashwini
                } else {
                    $('#dvConstructionDetails').show();
                    $('#dvConstructionDetails_fttx').hide();
                    $('#dvFiberEngDetails_fttx').hide();           
                    $('#PendingForm_FTTx').hide();
                    $('#btnSubmitCT').show();
                    $('#btnPendingSubmitCT').show();
                    $('#btnPendingParSubmitCT').hide();
                    //zoomToSpan(PARAM.SPANID + "|" + PARAM.SPANTYPE + "|" + PARAM.MZONE);
                    //routeInfoCallCTNew(PARAM.SPANID + "|" + PARAM.SPANTYPE + "|" + PARAM.MZONE + "|" + NE_LEG);
                }
                
                zoomToSpan(PARAM.SPANID + "|" + PARAM.SPANTYPE + "|" + PARAM.MZONE);
                routeInfoCallCTNew(PARAM.SPANID + "|" + PARAM.SPANTYPE + "|" + PARAM.MZONE + "|" + NE_LEG);
               
            }
        });
    } catch (e) {
        hideLoading();
        AppLog.getLogger('error', e.toString());
    }
}

1 Ответ

1 голос
/ 06 февраля 2020

Прежде всего, рассмотрите синтаксический анализ только один раз, когда http-ответ

success: function (datalist) {
                hideLoading();
                // use datalist directly
                ...
}

Как указано в ошибке, datalist[0] может быть пустым. Таким образом, вы можете сначала попытаться увидеть, существуют ли данные, прежде чем получить доступ к свойству SPAN_ID.

if(datalist[0]) {// do the processing}

В зависимости от браузера, который вы используете, вы можете рассмотреть возможность создания дополнительной цепочки (вам необходимо учитывать совместимость браузера, поскольку это новая функция ES2020)

spanid = datalist[0]?.SPAN_ID

В этом случае spanid будет неопределенным, если данные недоступны. Чтобы установить значение по умолчанию, вы можете использовать оператор объединения nulli sh ??

...