我正在更新一個經典的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皮塔樣例)爲什麼會在循環的第二,第三和第四次迭代中完美地工作,但不是第一次?
聽起來像是你應該用Scripting.Dictionary解決的問題。它有訪問和刪除隨機元素的方法:http://www.w3schools.com/asp/asp_ref_dictionary.asp – AardVark71
謝謝!我從來沒有處理Scripting.Dictionary,它看起來是未來的一個很好的選擇。不過,在這一點上,我的目標是(希望)解決這個特定的問題,而不必重寫和重新測試整個應用程序。 –