0

私は多かれ少なかれ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に変更しようとしましたが、問題は毎回同じです。

4

3 に答える 3

0
$.getJSON('/events/add/'+ start +'/'+ end, function(data) {

});   

$.getJSON('/events/cancel/'+eventId, function(data) {

});
于 2012-05-15T08:05:52.047 に答える
0

again, i know the right js function is being called

これはどうやって確認しましたか?

これは、さまざまな原因で発生する可能性があります。ほとんどの場合、クリック ハンドラーが原因で発生します。

$('.cancel').unbind('click').click()

または、ライブ/ダイの同等物。

それを過ぎたら、その関数の各ステップを console.log して、URL が変更されている場所を特定します。$.getJSONリクエストの直前に開始します。間違った URL の場合は、URL が切り替わるポイントに到達するまで上に移動します。

特にイベントを追加するときにあらゆる種類のことが起こっている可能性があるため、更新時に機能するという理由だけでコードを除外することはできません。

より多くのコードが役立ちます。

于 2012-05-15T05:31:32.133 に答える
0

デバッグ手順は、それを次のように変更することです。

var url = "/events/cancel/(eventId)";
alert(url);
$.getJSON(url, function(data) {
    //server returns whether or not cancellation was successful
});
于 2012-05-15T05:03:33.053 に答える