jquery - проблема с синхронизацией ajax и диалоговым окном в функции - PullRequest
0 голосов
/ 31 августа 2010

У меня проблема с синхронизацией результатов функции, которую я получаю с AJAX с этой функцией.Идея заключается в том, что я отправляю запрос AJAX, затем после получения ответа открываю диалоговое окно, и после подтверждения пользователь возвращает правильное значение.Проблема в том, что моя функция (даже если я установил ajax-запрос не быть асинхронным) не ожидает ответа и возвращает значение, прежде чем перехватить действие пользователя.Вот код:

checkColisions = function(event) {
        var parsedStart = Date.parse(event.start);
        var parsedEnd = Date.parse(event.end);
        var returnValue = true;

        returnValue = $.ajax({
          async: false,
          url: '<?php echo url_for('lecture/ajaxCheckColisions')?>',
          data: ({id: event.eid, name:event.title, start: parsedStart, end: parsedEnd}),
          success: function(data) {
              if(data == 'no-colisions')
              {
                  returnValue = false; //do nothing
              }
              else
              {
                  $("#dialog-colisions").dialog({
                        resizable: false,
                        open: function() {
                            $('#dialog-colisions').text()
                            $('#dialog-colisions').append('<p>Found colisions:</p>');
                            $('#dialog-colisions').append(data);
                        },
                        height:300,
                        modal: true,
                        buttons: {
                            'Continue': function(){                                    
                                $(this).dialog('close');
                                returnValue = false;
                            },
                            'Cancel': function() {
                                $(this).dialog('close');
                                returnValue = true;
                            }
                        }

                  });
              }
          },
          error: function(data) {
          alert('error' +data);
          }
        });
        return returnValue;
    };

enter code here

returnValue должно быть установлено в диалоговом окне, но это не так.У тебя есть идеи?

1 Ответ

0 голосов
/ 31 августа 2010

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

Теперь у вас есть что-то вроде

var returnValue= checkColisions(e);//go to server and open a popup
if(returnValue==true){
 doCollistionStuff(); 
}else{
 noCollitionDetected();
}

Мое предложение - изменитьдиалог к ​​чему-то вроде:

$("#dialog-colisions").dialog({
                        resizable: false,
                        open: function() {
                            $('#dialog-colisions').text()
                            $('#dialog-colisions').append('<p>Found colisions:</p>');
                            $('#dialog-colisions').append(data);
                        },
                        height:300,
                        modal: true,
                        buttons: {
                            'Continue': function(){                                    
                               doCollistionStuff();
                            },
                            'Cancel': function() {
                               noCollitionDetected();
                            }
                        }

                  });
...