1

地元のピタ レストラン用に、jScript で記述された従来の ASP アプリケーションを更新しています。デスクトップ サイトの新しいモバイル専用バージョンを作成しました。これにより、配達の注文と最終的なピタの多くのカスタマイズが可能になります (ピクルスやレタスなどを追加できるサブウェイの Web サイトを想像してみてください)。各ピタは、セッション変数に数字の文字列として保存されます。ピタの総数も格納されます。セッションは次のようになります。

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 ボタンは、削除するピタの番号 (DeleteID) を含む整数を ASP ファイルに送信します。私の関数は PitaCount と DeleteID を調べます。両方とも 1 の場合は、セッションを放棄するだけです。両方とも同じで 1 より大きい場合は、最後に追加されたピタが削除されるため、番号を付け直す必要はありません。ただし、PitaCount が DeleteID より大きい場合は、ピタの番号を付け直す必要があります。これを行うために使用しているコードは次のとおりです。

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 は undefined を返します。

代わりに 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 ピタの例を使用して) ループの 2 回目、3 回目、4 回目の反復では完全に機能するのに、最初の反復では機能しないのでしょうか?

4

1 に答える 1