Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery-函数中同步ajax和dialogbox的问题_Jquery_Ajax_Jquery Ui_Jquery Ui Dialog - Fatal编程技术网

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

jquery-函数中同步ajax和dialogbox的问题,jquery,ajax,jquery-ui,jquery-ui-dialog,Jquery,Ajax,Jquery Ui,Jquery Ui Dialog,我无法将使用AJAX获得的函数结果与该函数同步。 我的想法是发送AJAX请求,然后在收到应答后打开对话框,在用户确认函数返回正确的值之后。问题是,即使我将ajax请求设置为非异步,我的函数也不会等待响应并在捕获用户操作之前返回值。 下面是一个代码: checkColisions = function(event) { var parsedStart = Date.parse(event.start); var parsedEnd = Date.parse(even

我无法将使用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应该由dialogbox设置,但不是。
你知道吗?

你不应该试图阻止浏览器中的线程。更好的解决方案是打开对话框并从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();
                            }
                        }

                  });

谢谢你的建议,但在我的例子中,我似乎不得不像在你的第一段代码中那样使用它,因为这个主函数checkColisions是由FullCalendar的几个不同函数调用的,比如drop,eventDrop和eventClick,它们中的每一个都会产生其他冲突。我的意思是,函数checkcolions在代码的几个不同部分中使用,并且每个部分在得到结果后都会做一些不同的事情。因此,我们不可能在Continue按钮函数中执行操作,因为它的主体依赖于称为checkCollisions函数的代码部分。就像现在这样返回值似乎很好,并允许代码的这一部分决定如何处理结果,就像在您的代码中:var returnValue=checkColisionse;ifreturnValue==true{docollistionstaff;}否则{nocollisiondetected;}