2012-10-19 84 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 ......我欠你一個皮塔! –