我遇到了使用该函数同步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应该由对话框设置,但事实并非如此。 你有什么想法吗?
答案 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();
}
}
});