2015-04-14 2 views
-1

У меня есть DIV, в который я передаю данные в зависимости от разных вариантов на моей странице. Я добавляю эти значения в массив для создания запроса MYSQL. Когда страница загружает несколько пунктов MySQL установлена ​​SELECT FROM JOIN ON LIMIT 1000 и больше значения может быть добавлено в промежутке между этими предварительно загруженными пунктами, чтобы добиться чего-то вроде:Array.length возвращает фиксированное значение

SELECT * 
FROM abop_stats 
JOIN call_outcome ON abop_stats.outcome_idfk = call_outcome.id  
ORDER BY outcome_idfk ASC 
LIMIT 1000 

Перед страница грузила с 2 комплектами JOIN & ON статей так Я попытался написать оператор if, чтобы проверить длину запроса, и если он превысил определенную сумму, добавьте второй набор предложений.

Это не работает, поэтому я попытался console.log мою длину массива и печатает фиксированное значение 16 на нагрузке и то же значение, когда параметры добавляются в DIV's поэтому отображается запрос (HTML) не то же самое как один из console (поскольку второй набор предложений MySQL не добавляется).

Мой код:

function query() { 
    var qry = []; 
    qry.push($('#select').html()); 
    qry.push($('#selection').html()); 
    qry.push($('#from').html()); 
    qry.push($('#table').html()); 
    qry.push($('#join').html()); 
    qry.push($('#table2').html()); 
    qry.push($('#on').html()); 
    qry.push($('#tablejoin').html()); 
    if (qry.length > 10) { 
     qry.push($('#join2').html()); 
     qry.push($('#table3').html()); 
     qry.push($('#on2').html()); 
     qry.push($('#tablejoin2').html()); 
    } 
    qry.push($('#precondition').html()); 
    qry.push($('#column').html()); 
    qry.push($('#condition').html()); 
    qry.push($('#input').html()); 
    qry.push($('#precondition2').html()); 
    qry.push($('#column2').html()); 
    qry.push($('#condition2').html()); 
    qry.push($('#limiter').html()); 
    var fullqry = qry.join(" "); 
    var length = qry.length; 
    console.log(qry.length); 
    console.log(fullqry); 
    return fullqry; 
} 

Почему мой array.length дает статическое значение?

+0

Что вы подразумеваете под статическим значением? – Kushal

+2

Место, в котором вы выполняете проверку 'qry.length> 10', всегда терпит неудачу, потому что в это время массив будет иметь длину 8. Таким образом, они не будут добавлены в массив, что приведет к длине массива до 16. –

+0

@VigneswaranMarimuthu Если я помещаю оператор If наверху, все еще загружается с 16, как бы это исправить? – user3062358

ответ

2

Давайте сделаем простую математику, выполнив выполнение кода.

function query() { 
    var qry = [];// qry.length = 0; 
    qry.push($('#select').html()); // qry.length = 1; 
    qry.push($('#selection').html());// qry.length = 2; 
    qry.push($('#from').html());// qry.length = 3; 
    qry.push($('#table').html());// qry.length = 4; 
    qry.push($('#join').html());// qry.length = 5; 
    qry.push($('#table2').html());// qry.length = 6; 
    qry.push($('#on').html());// qry.length = 7; 
    qry.push($('#tablejoin').html());// qry.length = 8; 
    if (qry.length > 10) {// qry.length = 8; 8 > 10 = false; do not parse 
     qry.push($('#join2').html()); 
     qry.push($('#table3').html()); 
     qry.push($('#on2').html()); 
     qry.push($('#tablejoin2').html()); 
    } 
    qry.push($('#precondition').html());// qry.length = 9; 
    qry.push($('#column').html());// qry.length = 10; 
    qry.push($('#condition').html());// qry.length = 11; 
    qry.push($('#input').html());// qry.length = 12; 
    qry.push($('#precondition2').html());// qry.length = 13; 
    qry.push($('#column2').html());// qry.length = 14; 
    qry.push($('#condition2').html());// qry.length = 15; 
    qry.push($('#limiter').html());// qry.length = 16; 
    var fullqry = qry.join(" "); 
    var length = qry.length;// qry.length = 16; set length to 16 
    console.log(qry.length);// qry.length = 16; print 16 
    console.log(fullqry); 
    return fullqry; 

} 

Вы никогда не делаете это, потому что вы испытываете недостижимое значение. Измените оператор if, потому что в этой точке значение всегда будет равно 8. Тестирование длины массива бессмысленно там, потому что оно всегда будет тем же самым значением, если у вас нет цикла, который может привести к изменению длины.

Но в этой установке она всегда будет 8.

На sidenode, вы могли бы быть лучше использовать $ ("# селектор"). Текст() над .html(). Таким образом, у вас не будет вставленных тэгов с помощью сценариев на вашем пути.

+0

Спасибо, я передумаю. – user3062358

Смежные вопросы