jquery - 在函数中同步ajax和dialogbox的问题

时间:2010-08-30 20:34:19

标签: jquery ajax jquery-ui jquery-ui-dialog

我遇到了使用该函数同步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 :(得分:0)

您不应该尝试在浏览器中“阻止”某个帖子。更好的解决方案是打开对话框并从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();
                            }
                        }

                  });