Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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调用防止前面的DOM事件_Jquery_Ajax_Dom - Fatal编程技术网

Jquery ajax调用防止前面的DOM事件

Jquery ajax调用防止前面的DOM事件,jquery,ajax,dom,Jquery,Ajax,Dom,我的问题可能与其他人的问题相似,但我发现没有一个答案能解决这个特殊的“怪癖” DOM如何与我遇到问题的ajax交互 我有一个带有javascript/JQuery功能的网页,当用户单击特定按钮时 我正在尝试在div中显示“加载…等待”动画gif(或文本) (使用$(“#mydiv”).show或document.getElementById(“mydiv”).style.display=“block”), 然后调用主处理函数(函数2),该函数对php函数执行ajax post,以获取该函数继续处

我的问题可能与其他人的问题相似,但我发现没有一个答案能解决这个特殊的“怪癖”

DOM如何与我遇到问题的ajax交互

我有一个带有
javascript/JQuery
功能的网页,当用户单击特定按钮时

我正在尝试在div中显示“加载…等待”动画gif(或文本)

(使用$(“#mydiv”).show或document.getElementById(“mydiv”).style.display=“block”),

然后调用主处理函数(函数2),该函数对php函数执行ajax post,以获取该函数继续处理的数据

如果没有
post
,加载图形将按预期显示,并在预期时显示(在调用函数2之前)。但是,当我输入ajax调用时,图形不会出现(甚至是纯文本或警报框……基本上看起来DOM上没有任何变化),直到ajax post处理完成之后,即使在ajax post命令之前调用show命令

我已经尝试了我能找到的一切,包括
在发送之前
和ajaxSetup,在函数中包装东西,等等。。。但似乎没有任何帮助。我想了解ajax为什么以及如何阻止甚至在ajax调用之前调用的改变DOM的函数,以及是否有办法解决这个问题

我应该提到我使用的是
“async:false”
。为了避免所有关于这是一个多么糟糕的想法的评论,我使用ajax的唯一原因是有一种方法可以从javascript访问我的PHP代码,我实际上需要在继续使用javascript函数之前返回结果,这将我与使用同步调用联系在一起(即使这不是最好的方法

我使用的是继承的代码,因此我的选项在这一点上是有限的)。如果有其他方法可以做到这一点而不需要ajax的所有开销,我洗耳恭听

谢谢你的帮助

function mainfunc(){

    function getcomparedata(){
        var returndata = null;
        $.ajaxSetup({async:false});
        $.post("rostercomparematch",{clever_district_id:clever_dist_id, sa_district_id:sa_dist_id}).done( function(data){returndata = data;});
        $.ajaxSetup({async:true});
        return returndata;
    }

var compare = null;
$("#mydiv").show();  //OR document.getElementById("mydiv").style.display = "block" OR $("#mydiv").text("please wait") OR alert("function called") OR..........
compare = getcomparedata();
//keep processing with compare......
}

$("#button_do_match").click( function(){  event.preventDefault();  /*$("#mydiv").show(); - TRIED SHOWING THE DIV HERE ALSO*/  mainfunc(); });  

jQuery的
show
有一个回调。在其中执行ajax调用,这样动画就会完成,然后发布请求


显然,在没有这个问题的地方使用AJAX的异步部分会更好。

我认为您需要回调。我同意使用回调重构代码将有助于我异步使用调用(可能是一种解决方案),但不幸的是,这在此刻并不实用,因为我将不得不重写这里没有显示的许多其他代码。咬紧牙关。去掉async:false并重构代码,即使它需要一周的时间才能完成。当你完成后,即使你现在不感谢我,你也会感谢自己。我可能会感谢你……但是谁来支付牙科账单呢?;)我为之工作的人对额外的一周可能有不同的想法,也可能没有不同的想法。。。。。如果这需要很长时间,我想在这种情况下我不得不放弃它。谢谢,但不起作用……ajax正在停止整个“show()”函数,即使使用了complete或start选项。