I have a problem with getting the length of an array, when it is not initialized in the format: var variable = new Array();
Here is my code:
var inx;
var qns;
var qis;
var ncs;
var nzs;
var tps;
function display_question()
{
$( "#question_no" ).text( qns[ inx ] );
$( "#question_nc" ).text( ncs[ inx ] );
$( "#question_nz" ).text( nzs[ inx ] );
$( "#the_question" ).hide();
$( "#the_question" ).text( tps[ inx ] );
$( "#the_question" ).fadeIn( 500 );
}
function next_question()
{
var arr_len = qns.length;
if( inx < arr_len )
{
inx++;
display_question();
}
}
function prev_question()
{
if( inx > 0 )
{
inx--;
display_question();
}
}
function get_questions()
{
var url = "php/pytania.php";
$.ajax(
{
cache: false,
async: false,
type: "GET",
dataType: "text",
url: url,
success: function( response )
{
data = jQuery.parseJSON( response );
inx = 0;
qns = data.qns;
qis = data.qis;
ncs = data.ncs;
nzs = data.nzs;
tps = data.tps;
display_question();
}
} );
}
The problem is that when I try to return the length of qns like so: qns.length, it doesn’t return anything. I suspect that this may be because when i read in the array from the JSON response, it is not as an array object. Is there any way to fix this? I’d appreciate any help! 🙂
There is no difference between arrays/objects you retrieve via JSON and those created in JavaScript. The JSON objects and arrays are parsed into JavaScript ones.
And there is actully no need to call
new Array()ever.It seems
data.qnris an object not an array. You would have to loop over the objects and count the elements yourself.However as it seems that the object is continuous numerical keys, it would be better to create the correct output (array) from the beginning.
In your comments you wrote you use
json_encode( $json_array, JSON_FORCE_OBJECT )to create the JSON output. This will convert every array, even numerical ones, into objects.Instead, just use
json_encode($json_array). By default PHP will convert associative arrays to objects in JSON and numerical arrays to … well, arrays 😉If you do this,
data.qnrwill work as expected in JavaScript.Also note, instead of
dataType: 'text', you can set the it tojsonand jQuery will parse the response automatically for you (so no need to calljQuery.parseJSON).