我从开始重新开始。
我的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行: - )
之前
=============================================== ====
后
提示:如果这条线被评论我的电机全部不会改变。
motorsToDisplay[i][positionDansLigne] = motorsFull[k][positionDansLigne];
编辑:这是我的完整代码(没有ajax.php)
http://www.mediafire.com/view/dc48wv0voiqnuuw/fonctionsMoteurs.js http://www.mediafire.com/view/j4uj4daztfyzai5/moteurs.php
答案 0 :(得分:0)
我无法阅读mediafire代码(无限期地说“加载”,我不知道我是否需要帐户或其他内容),但是 -
你有一个非平凡的数据结构(字典数组),我没有看到初始化:我怀疑在填充motorsToDisplay
和motorsToDisplay
时,你有时会放入相同的字典进入两者。
通过说dict['key'] = value
来改变字典将改变字典,即,改变当然会改变字典,当使用两次时,字典显示两个地方的变化。
请检查您是否可以找到
motorsToDisplay[i] = motorsFull[k];
或
dict = { ... };
motorsToDisplay[i] = dict;
motorsFull[k] = dict;
某处......