Uncaught TypeError: kan eigenschap ‘lengte’ van undefined niet lezen

Hoe voorkom ik de volgende fout wanneer ik probeer om gegevens van een AJAX-aanroep te nemen en deze in een andere functie aan te sluiten wanneer ik op de verzendknop klik?

De console.log-aanroep in de ajax-functie laat zien dat de gegevens zijn gepakt en ik had gehoopt dat ze vervolgens werden opgeslagen in json_data.

Het doel was toen om deze gegevens te gebruiken om een ​​string te wijzigen die werd ingediend via een HTML-formulier.

De fout wordt dan geretourneerd op de regel in de ‘klik’-functie:

console.log(json_data.length);

<title>Test Form</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<style>
    #results_box {
        border: red 5px solid;
                }
    #place {
        border: #cccccc 1px solid;
    }           
</style>
<script type="text/javascript">
$(document).ready(function() {
    var json_source = "https://spreadsheets.google.com/feeds/list/0ApL1zT2P00q5dG1wOUMzSlNVV3VRV2pwQ2Fnbmt3M0E/od7/public/basic?alt=json";
    var string_data ="";
    var json_data = $.ajax({
        dataType: 'jsonp',
        url: json_source,
        success: function(data){
            var data_obj = [];
            for (i=0; i<data.feed.entry.length; i++){
                var el = {'key': data.feed.entry[i].title['$t'], 'value': '<p><a href="'+data.feed.entry[i].content['$t']+'>'+data.feed.entry[i].title['$t']+'</a></p>'};
                data_obj.push(el)};
            console.log("data grabbed");    
            return data_obj;
        },      
        error: function(jqXHR, textStatus, errorThrown){ 
                        $('#results_box').html('<h2>Something went wrong!</h2><p><b>' + textStatus  + '</b> ' + errorThrown  + '</p>');
        }
    }); 
    $(':submit').click(function(event, json_data){
        event.preventDefault();
        console.log(json_data.length);
        //function
        if ($('#place').val() !=''){
            var copy_string = $('#place').val();
            var converted_string = copy_string;
            for (i=0; i<json_data.length; i++){
                //console_log(data.feed.entry[i].title['$t']);
                converted_string = converted_string.replace(json_data.feed.entry[i].title['$t'], 
                    '<a href="'+json_data.feed.entry[i].content['$t']+'>'+json_data.feed.entry[i].title['$t']+'</a>');
            }  
            $('#results_box').text(converted_string).html();
        }
    });
});//document ready end 
</script>
</head>
<body>
    <div id="wrapper">
    <div id="query_box" class="panel">  
        <form id="form_submit"><h4>Copy to process:</h4>
          <textarea id="place"></textarea>
          <input type="submit" value="Go" />
        </form>
    </div>
   <div id="results_box" >Results will appear here</div>  
</div>


Antwoord 1, autoriteit 100%

U geeft de variabele niet correct door. Een snelle oplossing is om een ​​globale variabele te maken zoals deze:

var global_json_data;
$(document).ready(function() {
    var json_source = "https://spreadsheets.google.com/feeds/list/0ApL1zT2P00q5dG1wOUMzSlNVV3VRV2pwQ2Fnbmt3M0E/od7/public/basic?alt=json";
    var string_data ="";
    var json_data = $.ajax({
        dataType: 'json', // Return JSON
        url: json_source,
        success: function(data){
            var data_obj = [];
            for (i=0; i<data.feed.entry.length; i++){
                var el = {'key': data.feed.entry[i].title['$t'], 'value': '<p><a href="'+data.feed.entry[i].content['$t']+'>'+data.feed.entry[i].title['$t']+'</a></p>'};
                data_obj.push(el)};
            console.log("data grabbed");  
            global_json_data =   data_obj;
            return data_obj;
        },      
        error: function(jqXHR, textStatus, errorThrown){ 
                        $('#results_box').html('<h2>Something went wrong!</h2><p><b>' + textStatus  + '</b> ' + errorThrown  + '</p>');
        }
    }); 
    $(':submit').click(function(event){
        var json_data = global_json_data;
        event.preventDefault();
        console.log(json_data.length);
        //function
        if ($('#place').val() !=''){
            var copy_string = $('#place').val();
            var converted_string = copy_string;
            for (i=0; i<json_data.length; i++){
                //console_log(data.feed.entry[i].title['$t']);
                converted_string = converted_string.replace(json_data.feed.entry[i].title['$t'], 
                    '<a href="'+json_data.feed.entry[i].content['$t']+'>'+json_data.feed.entry[i].title['$t']+'</a>');
            }  
            $('#results_box').text(converted_string).html();
        }
    });
});//document ready end 

Antwoord 2, autoriteit 50%

console.log(typeof json_data !== 'undefined'
    ? json_data.length : 'There is no spoon.');

…of eenvoudiger…

console.log(json_data ? json_data.length : 'json_data is null or undefined');

Antwoord 3, autoriteit 21%

U hebt toegang tot een object dat niet is gedefinieerd.

De oplossing is controleren op null of undefined (om te zien of het object bestaat) en pas daarna herhalen.


Antwoord 4, autoriteit 14%

“ProjectID” JSON-gegevensformaatprobleem Verwijder “ProjectID”: deze waarde
verzameling object sleutel waarde

 { * * "ProjectID" * * : {
            "name": "ProjectID",
            "value": "16,36,8,7",
            "group": "Genel",
            "editor": {
                "type": "combobox",
                "options": {
                    "url": "..\/jsonEntityVarServices\/?id=6&task=7",
                    "valueField": "value",
                    "textField": "text",
                    "multiple": "true"
                }
            },
            "id": "14",
            "entityVarID": "16",
            "EVarMemID": "47"
        }
    }

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes