2012-05-15 4 views
0

Я создаю более или менее календарь Google, но с гораздо более конкретными функциями/функциями. Как и в Календаре Google, когда пользователь нажимает на событие, я заполняю «всплывающий» div с запросом ajax get. Html, который заполняет этот div, включает функции javascript, относящиеся к рассматриваемому событию. Когда пользователь завершит использование всплывающего окна, закрывает ли он или сохраняет изменения, я удаляю html внутри него, прежде чем скрывать его.

Теперь к проблеме: для определенного события есть процесс создания два шага щелчки 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 всплывающем ныряет стерта, всплывающий скрыта, и календарь refetches событий с сервера , Как и должно быть, новое событие теперь подается в календарь из базы данных.

Когда пользователь щелкает по версии базы данных, я заселить всплывающее окно с view.ctp (я использую CakePHP), который включает в себя кнопку отмены и яваскрипт функцию «отменить()»

Это где я нахожусь в недоумении: Я знаю, что кнопка вызывает функцию правильно, я протестировал ее несколькими разными способами. В функции другой запрос getJSON ...

$.getJSON("/events/cancel/(eventId)", function(data) { 
    //server returns whether or not cancellation was successful 
}); 

Если я обновил страницу, отмена работает, как ожидалось, но если я пытаюсь отменить событие сразу же после его создания (без первого обновления страницы), вместо «/ events/cancel/(eventId)», который вызывается, «/ events/add/(start)/(end)» снова вызывается.

Нет проблем с получением данных JSON (когда вызывается правильный URL-адрес). Фактически, возвращаемое им сообщение об ошибке - это тот, который вы ожидаете, если попытаетесь добавить событие, которое перекрывается с существующим событием.

Опять же, я знаю, что правильная функция JavaScript вызывается, и я знаю, что каждая серверная функция работает надлежащим образом. Это просто, по причинам, которые я не понимаю, вызывая неправильный URL.

Извините, что сделал такую ​​историю из этого, и я надеюсь, что я включил достаточно информации. Я не думаю, что это проблема в моем коде - как я уже упоминал, обновление страницы предотвращает эту проблему.

Я попытался установить кеш jquery в false. Я попытался переименовать и переместить мои функции JavaScript, чтобы предотвратить возможные перекрытия. Я попытался изменить $ .getJSON на просто $ .get, но проблема одна и та же.

+3

Замечательно объяснить все, но чтобы получить действительно полезную помощь, вы захотите показать (много) больше кода. –

ответ

0

Шаг отладки будет изменить его

var url = "/events/cancel/(eventId)"; 
alert(url); 
$.getJSON(url, function(data) { 
    //server returns whether or not cancellation was successful 
}); 
+0

просто попробовал это, и раньше я пробовал другие подобные вещи. он предупреждает о желаемом URL-адресе, а затем как-то просто звонит/события/добавляет в любом случае ... – idmwsls

0

again, i know the right js function is being called

Как вы это проверить?

Это может быть вызвано рядом вещей.Большую часть времени это благодаря некоторому паразитной обработчик щелчка, который обычно можно избавиться, делая

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

Или живой/умереть эквивалент.

Как только вы пройдете мимо этого, console.log каждый шаг в этой функции, чтобы выяснить, где изменяется URL. Начните прямо перед запросом $.getJSON. Если это неправильный URL-адрес, двигайтесь вверх, пока не дойдете до точки, где URL-адрес переключается.

Вы не можете освобождать код только потому, что он работает при обновлении, тем более, что при добавлении события могут происходить всевозможные вещи.

Больше кода было бы полезно.

+0

Я подтвердил, что он вызывал правильную функцию, помещая alert() на нем в разных точках. вы очень правы в том, что он нахальный, чтобы освободить мой код, я думаю, что я только что понял, что я сделал не так, и мой бог - это ошибка новичка! – idmwsls

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

}); 

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

}); 
Смежные вопросы