私は多かれ少なかれGoogleカレンダーですが、はるかに具体的な機能/機能を備えたものを構築しています。Googleカレンダーのように、ユーザーがイベントをクリックすると、「ポップアップ」divにajaxgetリクエストが入力されます。そのdivに入力されるhtmlには、表示されているイベントに固有のjavascript関数が含まれています。ユーザーがポップアップの使用を終了したら、ポップアップを閉じるか変更を保存するかにかかわらず、ポップアップを非表示にする前に、ポップアップ内のhtmlを消去します。
ここで問題があります。特定のイベントには、2段階の作成プロセスがあります。1)ユーザーがカレンダーをクリックして一時的で移動可能なサイズ変更可能なイベントを作成し、所定の位置に移動し、クリックして確認ポップアップを表示します。確認されたら、サーバーを呼び出してデータベースにイベントを作成します。
//(start) and (end) are unix timestamps for the beginning and end of the new event
$.getJSON("/events/add/(start)/(end)", function(data) {
//server returns whether or not the add was successful...
});
これで、確認され、サーバーで新しいイベントの保存に問題が発生しなくなると、ポップアップのhtmlが消去され、ポップアップが非表示になり、カレンダーがサーバーからイベントを再フェッチします。当然のことながら、新しいイベントはデータベースからカレンダーに送られています。
ユーザーがデータベースのバージョンをクリックすると、ポップアップにview.ctp(cakephpを使用しています)が表示されます。これには、キャンセルボタンとjavascript関数「cancel()」が含まれています。
これは私が途方に暮れているところです:私はボタンが関数を正しく呼び出していることを知っています、私はそれをいくつかの異なる方法でテストしました。関数内には、別のgetJSONリクエストがあります...
$.getJSON("/events/cancel/(eventId)", function(data) {
//server returns whether or not cancellation was successful
});
ページを更新した場合、キャンセルは期待どおりに機能しますが、「/ events / cancel /(eventId)」URLが呼び出される代わりに、イベントを作成した直後に(最初にページを更新せずに)キャンセルしようとすると、 「/events/ add /(start)/(end)」が再度呼び出されます。
JSONデータのフェッチに問題はありません(正しいURLが呼び出されたとき)。実際、返されるエラーメッセージは、既存のイベントと重複するイベントを追加しようとした場合に予想されるものです。
繰り返しになりますが、適切なJavaScript関数が呼び出されており、各サーバー側関数が適切に機能していることを知っています。単純に、私にはわからない理由で、間違ったURLを呼び出しています。
このような話をしてすみません、そして私は十分な情報を含めたことを望みます。私のコードでは問題ではないと思います-私が言ったように、ページの更新はこの問題を防ぎます。
jqueryのキャッシュをfalseに設定してみました。重複の可能性を防ぐために、JavaScript関数の名前を変更して再配置してみました。$.getJSONを単に$.getに変更しようとしましたが、問題は毎回同じです。