Jquery ajax javascript函数随机失败

时间:2014-07-23 14:42:17

标签: javascript jquery ajax timeout

我在jQuery / ajax中执行了几个函数但是我有随机失败。

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

但是第二个根本没有执行! 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
                                }));
                            }
                        }
                    });
                }
            });
        }
    }
});

1 个答案:

答案 0 :(得分:0)

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

如果您尝试使用延迟jquery对象来处理响应的成功和失败案例,我还建议您使用。 http://api.jquery.com/category/deferred-object/.This方式您可以使用更清晰的代码,并且不会将callbacks链接到另一个内部。首先执行async:false,因为我非常确定这会解决您的问题。