6

update

My code that works. When page is loaded

    product= [[],[]]; 

then the code executed after ajax call:

$('#contextreload ul').each(function(i, ul) {
product.push([]);
});

$('#contextreload ul').each(function(i, ul) {
  allline=i; 
  $('#reloadajax'+i+' li').each(function(lk, li) {
  var lilk = $(li).html();  product[i][lk]=lilk;

  // your code goes here
 });

  // your code goes here
});

To use eval(); in ajax response for this, with some changes in php file? /endupdate

product[0]=[1,2,3,4];

product[1]=[a,b,x,z];

.

.

product[10]=[extra,extra,extra,extra];

When I load the page this is executed: product= [[],[],[],[],[],[],[],[],[],[]];

But if I declare this, when I call ajax I can push add data only to this array (10 rows) If I have 11 rows (product[10][0] and product[10][1]), the extra data will not be added. After ajax call I need the extra data : product= [[],[],[],[],[],[],[],[],[],[],**[11]**];

This function is because I want to put data in array after loading ajax data from php file.

$('#contextreload ul').each(function(i, ul) {
 <strike> var product = $(ul).html();  </strike>
    allline = i; 

    $('#reloadajax'+i+' li').each(function(lk, li) {
        var lilk = $(li).html();  
        product[i][lk]=lilk;
        alert(lilk+lk);
        // your code goes here
    });
    // your code goes here
});


}
3
  • 1
    Why pre-allocate/dimension? Create a basic empty array =[]; then .push to it in the loop as needed Commented Mar 25, 2015 at 11:26
  • I change the data after ajax call. First time I have 2 rows with data. After the call there can be 10 rows. Commented Mar 25, 2015 at 11:44
  • @user3944364 Post the code of your ajax call Commented Mar 25, 2015 at 11:54

4 Answers 4

6

In the succes of your ajax call use the function push()

product.push([]);

This adds an array at the last index of product. Like that ,the index 10 is created and you have an extra data.

If you want to add a dynamic number of rows, use this code :

var number_of_new_row = 11; // 11 for example, you can use any number >= 0
for(; number_of_new_row--;)
    product.push([]);

Another way

In your ajax return save the new length of your array product in a global variable. And use it before your loop to reset your array and initialize it with the new length.

var lengthArray = 10; // update the value in the callback of your ajax call

And your loop :

var product = [];
for(; lengthArray--;)
    product.push([]);

$('#contextreload ul').each(function(i, ul) {
    //<strike> var product = $(ul).html();  </strike>
    allline = i; 

    $('#reloadajax'+i+' li').each(function(lk, li) {
        var lilk = $(li).html();  
        product[i][lk]=lilk;
        alert(lilk+lk);
        // your code goes here
    });
    // your code goes here
});
Sign up to request clarification or add additional context in comments.

3 Comments

I want to rewrite the array. I think my function is wrong with this line product[i][lk]=lilk; . Mabe product[i]=[var,var,var,var]; is right. I need to rethink the loop
@user3944364 I added another way in my answer.
Works $('#contextreload ul').each(function(i, ul) { product.push([]); }); Thanks
3

Note: this line of your code produces a string, not an array.

var product = $(ul).html();  //returns string not an array

what you need is something like

var product_arr = {}; // an object or 
var product_arr = []; // an array

2 Comments

{} defines an object and not an array. [] is more appropriate
thats right R3tep. that was what I meant on the 2nd line
2

The following code used to declare empty array in javascript

var product_arr = new Array(); //declaring empty array

console.log(product_arr);

Comments

0
var product = [];

was the answer I was looking for personally

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.