为什么这两个警报显示不同的值?

时间:2014-01-23 03:08:04

标签: javascript jquery arrays

我从开始重新开始。

我的Intranet网页的工作方式如下:

1)用户加载页面,我将$ .Post的电机数据库加载到名为motorsFull的数组中。

// load from my motor database 
$.post("ajax.php?action=chargementBases",
    function(data) {
    motorsFull = data[0];
},"json");

// array built in ajax.php
$query = mysql_query("SELECT * FROM details_moteurs ORDER BY m_update_id DESC");
    $i=0;
    while ($infosMoteurs = mysql_fetch_assoc($query)) {
        $arrayMoteur[$i] = $infosMoteurs;
        $i++;
}

2)当用户在研究领域输入时,我过滤我的数组motorsFull并从中复制与关键字匹配的行与函数。

3)我的电机数据库的每一行都是更新,因此您可以为一个电机ID输入3..10..25。这允许我保存所有用户所做的所有更改。

4)搜索完成后,过滤我的motorsFull数组后,将motorsToDisplay数组下的10行第一行返回到我的显示更新功能。

5)为了获得用户屏幕上显示的最后一个值,对于返回的10个第一个电机,我在我的motorsFull数组中查找更新并根据一些参数更新motorToDisplay的每个单元格,并使用以下代码。 (所有代码都没有找到每个不同电机的数据更新)。

for (var k=0; k < motorsFull.length;k++ )
{
    //si on est sur le même moteur et que le n° d'update est différent
    if(motorsToDisplay[i]['m_id'] == motorsFull[k]['m_id'] && motorsToDisplay[i]['m_update_id'] != motorsFull[k]['m_update_id']){

        //historique k plus ancien que i
        if(motorsFull[k]['m_last_update'] > motorsToDisplay[i]['m_last_update']){

            // pour chaque case de la ligne en cours
            for (var positionDansLigne in motorsToDisplay[i]){

                //si la case récente est  vide
                if(motorsFull[i][positionDansLigne] == '')
                {
                    // si la case ancienne n'est pas vide
                    if(motorsFull[k][positionDansLigne] == ''){

                        if(positionDansLigne != 'm_update_id' && positionDansLigne != 'm_user_done_update'&& positionDansLigne != 'm_update_type'&& positionDansLigne != 'm_update_comment'&& positionDansLigne != 'm_id'&& positionDansLigne != 'm_last_update'){

                            //on ecrase la valeur vide par l'ancien historique
                            motorsToDisplay[i][positionDansLigne] = motorsFull[k][positionDansLigne];
                        }
                    }
                }
            }

        }
        else{

            //historique k plus récent que i
            // pour chaque case de la ligne en cours

            for (var positionDansLigne in motorsToDisplay[i]){

                // si la case du tableau plus récent n'est pas vide
                if(motorsToDisplay[k][positionDansLigne] != ''){

                    if(positionDansLigne != 'm_update_id' && positionDansLigne != 'm_user_done_update'&& positionDansLigne != 'm_update_type'&& positionDansLigne != 'm_update_comment'&& positionDansLigne != 'm_id'&& positionDansLigne != 'm_last_update'){

                        //on ecrase la valeur par le nouvel historique
                        motorsToDisplay[i][positionDansLigne] = motorsFull[k][positionDansLigne];   
                    }
                }
            }
        }
    }
}

6)我的问题从这里开始。我不知道为什么但是我第一次读到我的发动机时完全没问题,但是在我加了它之后,数据就像我在我的数组motorToDisplay中所做的那样更新了上面的功能。我的代码中没有任何地方更新来自motorsFull的任何值。

6b)我编写了以下代码,以便在读取之前和之后显示我的阵列motor的内容。

var textDebug ='';
    for (var k=0; k < motorsFull.length;k++ )
    {
        if(motorsFull[k]['m_id']=='507'){
            textDebug+='\r\r Line '+k+': ';
            for (var y in motorsFull[k]){
                textDebug+='['+ motorsFull[k][y]+'] ';
            }
        }
    }
    alert(textDebug);

7)如果有人能解释我为什么不从motorsFull读取两次相同的数据,或者为什么这个数组被更新它可以帮助我。我也可以提供完整的代码,但它超过1000行: - )

之前

Before

=============================================== ====

After

提示:如果这条线被评论我的电机全部不会改变。

motorsToDisplay[i][positionDansLigne] = motorsFull[k][positionDansLigne];

编辑:这是我的完整代码(没有ajax.php)

http://www.mediafire.com/view/dc48wv0voiqnuuw/fonctionsMoteurs.js http://www.mediafire.com/view/j4uj4daztfyzai5/moteurs.php

1 个答案:

答案 0 :(得分:0)

我无法阅读mediafire代码(无限期地说“加载”,我不知道我是否需要帐户或其他内容),但是 -

你有一个非平凡的数据结构(字典数组),我没有看到初始化:我怀疑在填充motorsToDisplaymotorsToDisplay时,你有时会放入相同的字典进入两者。

通过说dict['key'] = value来改变字典将改变字典,即,改变当然会改变字典,当使用两次时,字典显示两个地方的变化。

请检查您是否可以找到

motorsToDisplay[i] = motorsFull[k];

dict = { ... };
motorsToDisplay[i] = dict; 
motorsFull[k] = dict;
某处......