2012-10-19 47 views
1

我正在更新一个经典的ASP应用程序,用jScript编写,当地的皮塔餐厅。我为他们的桌面网站创建了一个新的移动特定版本,允许订购交付和大量定制最终皮塔饼(想象一下Subway的网站,它可以让你添加泡菜,生菜等)。每个皮塔都作为一串数字存储在会话变量中。皮塔斯的总数也被储存。这次会议可能是这样的:重新编号排序的会话变量时删除一个

PitaCount = 3 
MyPita1 = "35,23,16,231,12" 
MyPita2 = "24,23,111,52,12,23,93" 
MyPita3 = "115,24" 

我知道有可能是保存数据更好的方法,但现在,因为整个事情是写,工作和生活(和客户端很高兴),我我想解决我的问题。这里的问题...

我已经在订单概述页面上的按钮,允许客户从购物车删除皮塔斯。当我这样做时,我想重新编号会话变量。如果客户删除MyPita1,我需要将MyPita2重新编号为MyPita1,将MyPita3重新编号为MyPita2,然后递减PitaCount。

AJAX按钮发送一个整数到一个ASP文件,删除皮塔的数量(DeleteID)。我的函数查看PitaCount和DeleteID。如果他们都是1,它就放弃会话。如果它们都相同,但大于一,我们删除最近添加的皮塔饼,所以不需要重新编号。但是,如果PitaCount大于DeleteID,则需要重新编号pitas。下面是我使用这样做代码:

for (y=DeleteID;y<PitaCount;y++) { 
    Session("MyPita" + y) = String(Session.Contents("MyPita" + (y+1))); 
}; 
Session.Contents.Remove("MyPita" + PitaCount); 
PitaCount--; 
Session.Contents("PitaCount") = PitaCount; 

这适用于每一个皮塔除了一个取代了删除一个,它返回“未定义”。例如,如果我的购物车中有6个皮塔饼,而我删除了MyPita2,那么我最终会购买5个皮塔饼。数字1,3,4和5正是你所期望的,但MyPita2返回未定义。

我也尝试了WHILE循环,而不是:

while (DeleteID < PitaCount) { 
    Session("MyPita" + DeleteID) = String(Session.Contents("MyPita" + (DeleteID+1))); 
    DeleteID++; 
}; 
Session.Contents.Remove("MyPita" + PitaCount); 
PitaCount--; 
Session.Contents("PitaCount") = PitaCount; 

也将返回“未定义”,就像上面的一个。

直到我可以得到这个工作,我只是写最近的皮塔饼到被删除皮塔腾空的地方,但这次重新排列了购物车,我认为这是一个可用性问题,因为人们期望他们添加到购物车保持相同的顺序。 (是的,我可以使用它为会话和订单添加某种时间戳,但解决我遇到的问题会更快,我认为)。

我很困惑。为什么(使用上面的6皮塔样例)为什么会在循环的第二,第三和第四次迭代中完美地工作,但不是第一次?

+0

听起来像是你应该用Scripting.Dictionary解决的问题。它有访问和删除随机元素的方法:http://www.w3schools.com/asp/asp_ref_dictionary.asp – AardVark71

+0

谢谢!我从来没有处理Scripting.Dictionary,它看起来是未来的一个很好的选择。不过,在这一点上,我的目标是(希望)解决这个特定的问题,而不必重写和重新测试整个应用程序。 –

回答

2

我不能确定,但​​我认为你的问题可能是DeleteID的值是一个字符串。这可能发生在你指定的值通过执行类似:

var DeleteID = Session("DeleteID"); 

假设这是真的,那么在你的循环(其写入删除点)的第一次迭代,y是一个字符串,并表达y+1被解释为字符串连接而不是数字加法。例如,如果您删除ID 1,则实际上是将ID 11("1" + 1)中的值复制到删除的点中,这可能在您的测试中不存在。这可以通过将至少11件物品添加到购物车然后删除第一件物品来测试。在下一次迭代中,增量运算符++强制y是一个数字,因此该脚本从该点起按预期工作。

的解决方案是初始化你的循环时,DeleteID转换为数字:

for (y = +DeleteID; y < PitaCount; y++) { 

可能有更好的方法来将字符串转换为数字,但+是我记得的东西。

+0

完美的工作,非常感谢你Cheran!如果你曾经在摩根敦,WV ......我欠你一个皮塔! –