【问题标题】:Jquery ajax javascript functions fails randomlyJquery ajax javascript函数随机失败
【发布时间】:2014-09-14 19:40:20
【问题描述】:

我在 jQuery/ajax 中执行了几个函数,但我遇到了随机失败。

第一个函数总是被执行(在 ajax 中)。它调用 PHP 代码,将数据添加到数据库中,然后第二个函数使用一些返回的数据。

但是第二个根本没有执行! successfail 甚至 ajax 中的 beforesend 方法都没有响应。

如果我在这两个函数之间放置一个alert('something');,我的第二个函数就会被执行,如果我不这样做它就不会。以前有人遇到过这个问题吗?

代码

$("#send_new_arch_form").click(function(){
    if($("#archNewLocSet").val()=="0"){
        var name    = $("#nomArch").val();
        var fname = $("#prenomArch").val();
        var v1   = $("#rueArch").val();
        var v2 = $("#numArch").val();
        var v3 = $("#bteArch").val();
        var v4 = $("#locArch").val();
        var v5 = $("#telArch").val();
        var v6 = $("#emailArch").val();
        if((name == "")){
            $(".errorNewArchMsg").html(" * All fields Required").fadeIn("Slow").fadeOut(3000);
        }else if(v5!='' && ((v5.length)<9)){
            $(".errorNewArchMsg").html(" Le num&eacute;ro de t&eacute;l&eacute;phone est invalide").fadeIn("Slow").fadeOut(3000);
        }else if(v6!='' && ((validateEmail(v6))==false)){
            $(".errorNewArchMsg").html(" L'adresse e-mail est invalide").fadeIn("Slow").fadeOut(3000);
        }else{
            $(".errorNewArchMsg").fadeOut();
            $.ajax({
                type    :'POST',
                url     :'./php/insertNewArch.php',
                data    :{  'name' : name,'fname' : fname,'rue' : v1,'numero' : v2, 'bte' : v3, 'loc' : v4,'tel' : v5,'email' : v6},
                error:function(response){
                    alert("<h3>Erreur lors de la cr\351ation...</h3>");
                },
                success:function(returnData){
                    alert("RETOUR : "+returnData);
                    $("#nomArch").val('');
                    $("#prenomArch").val('');
                    $("#rueArch").val('');
                    $("#numArch").val('');
                    $("#bteArch").val('');
                    $("#locArch").removeAttr('selected').filter("[value='']").attr('selected',true);
                    $("#telArch").val('');
                    $("#emailArch").val('');
                    $.fancybox.close();
                    $("#archListe").empty();
                    $.ajax({
                        type : 'POST',
                        url : './php/getArchListe.php',
                        data : {
                            'query':'*',
                        },
                        error : function(){
                            alert('ERREUR MISE A JOUR DE LA LISTE');
                        },
                        success : function(response){
                            $('#archListe').append($('<option>',{
                                value : '',
                                text : 'Choisissez dans la liste'
                            }));
                            var myData = JSON.parse(response);
                            for(var i=0;i<myData.length;i++){
                                var id = myData[i].id;
                                var nom = myData[i].nom;
                                var prenom = myData[i].prenom;
                                var rue = myData[i].rue;
                                var numero = myData[i].num;
                                var boite = myData[i].bte;
                                var cp = myData[i].cp;
                                var loc = myData[i].loc;
                                if(rue!="" && numero!=""){
                                    rue = rue+", "+numero;
                                }
                                if(cp!="" && loc!=""){
                                    loc = "- "+cp+" "+loc;
                                }
                                var field = nom+" "+prenom+" ; "+rue+" "+boite+" "+loc;
                                $('#archListe').append($('<option>',{
                                    value : id,
                                    text : field
                                }));
                            }
                        }
                    });
                }
            });
        }
    }else{
        var name    = $("#nomArch").val();
        var fname = $("#prenomArch").val();
        var v1   = $("#rueArch").val();
        var v2 = $("#numArch").val();
        var v3 = $("#bteArch").val();
        var v4 = $("#paysLocArch").val();
        var v5 = $("#CPNewLocArch").val();
        var v6 = $("#nameNewLocArch").val();
        var v7 = $("#telArch").val();
        var v8 = $("#emailArch").val();
        if((name == "")){
            $(".errorNewArchMsg").html(" * Le nom est obligatoire!").fadeIn("Slow").fadeOut(3000);
        }else if(v7!='' && ((v7.length)<9)){
            $(".errorNewArchMsg").html(" Le num&eacute;ro de t&eacute;l&eacute;phone est invalide").fadeIn("Slow").fadeOut(3000);
        }else if(v8!='' && ((validateEmail(v8))==false)){
            $(".errorNewArchMsg").html(" L'adresse e-mail est invalide").fadeIn("Slow").fadeOut(3000);
        }else if(($.trim(v5)!='') && ($.trim(v6)=='')){
            $(".errorNewArchMsg").html(" Impossible de cr&eacute;er une localit&eacute; sans lui donner de nom").fadeIn("Slow").fadeOut(3000);
        }else if(($.trim(v6)!='') && ($.trim(v5)=='')){
            $(".errorNewArchMsg").html(" Impossible de cr&eacute;er une localit&eacute; sans donner le code postal").fadeIn("Slow").fadeOut(3000);
        }else if((($.trim(v5)!='')||($.trim(v6)!=''))&&(v4=='')){
            $(".errorNewArchMsg").html(" Impossible de cr&eacute;er une localit&eacute; sans choisir le pays").fadeIn("Slow").fadeOut(3000);
        }else{
            $(".errorNewArchMsg").fadeOut();
            $("#nomArch").val('');
            $("#prenomArch").val('');
            $("#rueArch").val('');
            $("#numArch").val('');
            $("#bteArch").val('');
            $("#paysLocArch").removeAttr('selected').filter("[value='']").attr('selected',true);
            $("#CPNewLocArch").val('');
            $("#nameNewLocArch").val('');
            $("#telArch").val('');
            $("#emailArch").val('');
            $.fancybox.close();
            var insertNewLoc = true;
            newLoc = false;
            if(($.trim(v5)=='')||($.trim(v6)=='')||($.trim(v4)=='')){
                insertNewLoc = false;
            }
            if(insertNewLoc == true){
                //alert("INSERT NEW LOC!!");
                newLoc = $.ajax({
                    type : 'POST',
                    url : './php/insertNewLoc.php',
                    data : {'pays':v4,'cp':v5,'localite':v6},
                    error : function(response){
                        alert("<h3>Erreur lors de la cr\351ation de la nouvelle localit\351</h3>");
                    },
                    success : function(returnData){
                        newLoc = returnData;
                        return newLoc;
                    }
                });
            }else{
                newLoc = v6;
            }
//IF I ADD ALERT('SOMETHING') HERE, THE .AJAX STATEMENT BELOW GETS EXECUTED, IF I DON'T ADD ANY ALERT, THE STATEMENT DOES NOT GET EXECUTED...
            $.ajax({
                type    :'POST',
                url     :'./php/insertNewArch.php',
                data    :{'name' : name,'fname' : fname,'rue' : v1,'numero' : v2, 'bte' : v3, 'loc' : newLoc,'tel' : v7,'email' : v8,'pays':v4},
                beforeSend:function(){
                    alert(newLoc);
                },
                error:function(response){
                    alert("<h3>Erreur lors de la cr\351ation...</h3>");
                },
                success:function(returnData){
                    $.ajax({
                        type : 'POST',
                        url : './php/getArchListe.php',
                        data : {'query':'*'},
                        error : function(){
                            alert('ERREUR MISE A JOUR DE LA LISTE');
                        },
                        success : function(response){
                            $("#archListe").empty();
                            $('#archListe').append($('<option>',{
                                value : '',
                                text : 'Choisissez dans la liste'
                            }));
                            var myData = JSON.parse(response);
                            for(var i=0;i<myData.length;i++){
                                var id = myData[i].id;
                                var nom = myData[i].nom;
                                var prenom = myData[i].prenom;
                                var rue = myData[i].rue;
                                var numero = myData[i].num;
                                var boite = myData[i].bte;
                                var cp = myData[i].cp;
                                var loc = myData[i].loc;
                                if(rue!="" && numero!=""){
                                    rue = rue+", "+numero;
                                }
                                if(cp!="" && loc!=""){
                                    loc = "- "+cp+" "+loc;
                                }
                                var field = nom+" "+prenom+" ; "+rue+" "+boite+" "+loc;
                                $('#archListe').append($('<option>',{
                                    value : id,
                                    text : field
                                }));
                            }
                        }
                    });
                }
            });
        }
    }
});

【问题讨论】:

  • 请向我们展示功能
  • 显示代码...可能你需要使用 async:false

标签: javascript jquery ajax timeout


【解决方案1】:

尝试将async:false 设置为ajax 请求。我相信这会解决它,因为您说通过放置 alert 它会被执行,因为 alert 将停止其余的流程并为请求提供时间来完成并让第二个被执行。

如果您尝试使用延迟的jquery 对象来处理响应的成功和失败情况,我也会建议您。 http://api.jquery.com/category/deferred-object/.This 这样你的代码就更干净了,而且你最终不会把 callbacks 一个在另一个里面。请先发送async:false,因为我很确定这会解决您的问题。

【讨论】:

  • 好吧...我试图在我的陈述中添加“async:false”...但没有效果...事实是:我参与了 if (insertNewLoc==true)当我离开这部分时,如果我在下一个 .ajax 部分之前添加“alert("xx"),它工作正常……如果我不这样做,它不会……不明白为什么.. . :(
猜你喜欢
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多