Ajax表单仅在首次刷新后才能工作

时间:2014-02-08 16:53:15

标签: javascript jquery ajax forms

我有一个通过AJAX发送的表单,但AJAX仅在首次刷新(F5)后才能工作。

我第一次打开html时发送表单,我要做一个页面刷新,否则数据不会被提交。在第一次刷新之后,AJAX正在完美地工作,并始终反映成功的新数据。

我提交表单后附加的数据:($(“#fldIdLetraN”)和$(“#fldLetraN”)),我要通过php文件中的$ _REQUEST调用它,我想这可以做一些干扰第一次发送表单是因为数据没有真正插入JSON文件中导致$ _REQUEST设置不正确。

    $("body").on("submit", "#frmPersonas", function(e) {
    $("#fldIdLetraN").val(jQuery.inArray(RemoveAccents($("#fldNombre").val().substr(0, 1)), $aLetras));
    $("#fldLetraN").val(RemoveAccents($("#fldNombre").val().substr(0, 1)));
    var fd = new FormData($("#frmPersonas")[0]);
    $.ajax({type: 'POST',
        url: "procjson.php",
        data: fd,
        processData: false,
        contentType: false,
        success: function() {
            CargarPagina($LetraAct, $IdLetraAct, $PagActual);
            $("#form").css("display", "none");
            $("#formbg").css("display", "none");
        }
    });
    e.preventDefault();
});

整个代码:

        <!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Agenda</title>
        <script type="text/javascript" src="jquery-1.11.0.min.js"></script>
        <link rel="stylesheet" href="style.css" />
    </head>
    <body>
        <div id="formbg">
            <div id="form"></div>
        </div>
        <div id="divAgenda">
            <div id="divLetras"></div>
            <div id="divEditar">
                <a href="#add" id="add"><div><img src="img/ops/add.png" alt="" /></div></a>
                <a href="#update" id="update"><div><img src="img/ops/update.png" alt="" /></div></a>
                <a href="#delete" id="delete"><div><img src="img/ops/delete.png" alt="" /></div></a>
            </div>
            <div id="divBusqueda">
                <a href="#hojear" id="hojear"><div><img src="img/ops/hojear.png" alt="" /></div></a>
                <a href="#search" id="search"><div><img src="img/ops/search.png" alt="" /></div></a>
            </div>
            <div id="divPersonas"></div>
            <div id="divPaginas"></div>
            <div id="divDesplazar">
                <a href="#first" id="first"><div><img src="img/move/first.png" alt="" /></div></a>
                <a href="#previous" id="prev"><div><img src="img/move/previous.png" alt="" /></div></a>
                <a href="#next" id="next"><div><img src="img/move/next.png" alt="" /></div></a>
                <a href="#last" id="last"><div><img src="img/move/last.png" alt="" /></div></a>
            </div>
        </div>
    </body>
</html>
<script>
    $(document).ready(function() {
        $aLetras = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
                "k", "l", "m", "n", "ñ", "o", "p", "q", "r", "s", "t", "u", "v",
                "w", "x", "y", "z");
        for (var i = 0; i < $aLetras.length; i++) {
            $("#divLetras").append("<a href='#" + $aLetras[i] + "' id='" + $aLetras[i] + "-" + i + "'\n\
                                    class='tab-letra'>" + $aLetras[i].toUpperCase() + "</a>");
        }
        $PagActual = 0;
        CargarPagina("a", 0, 0);
    });
    function CargarPagina(letra, id_letra, pag_actual, hojear) {
        $.getJSON("datos.json", function(datos) {
            $("#divPersonas").empty();
            $("#divPersonas").append("<ul id='col1'></ul><ul id='col2'></ul>");
            var res_pagina = 6;
            for (var i = pag_actual * res_pagina; i < pag_actual * res_pagina + res_pagina; i++) {
                if (datos.personas[id_letra][letra][i] === undefined) {
                    break;
                }
                var html = "<div id='per" + datos.personas[id_letra][letra][i].id + "'>";
                html += "<div><img src='img/photo/" + datos.personas[id_letra][letra][i].foto + "' /></div>";
                html += "<div><span>Nombre: </span><span id='nom" + datos.personas[id_letra][letra][i].id + "'>";
                html += datos.personas[id_letra][letra][i].nombre + "</span><br />";
                html += "<span>Apellidos: </span><span id='ape" + datos.personas[id_letra][letra][i].id + "'>";
                html += datos.personas[id_letra][letra][i].apellidos + "</span><br />";
                html += "<span>Edad: </span><span id='eda" + datos.personas[id_letra][letra][i].id + "'>";
                html += datos.personas[id_letra][letra][i].edad + "</span><br />";
                html += "<span>Teléfono: </span><span id='tel" + datos.personas[id_letra][letra][i].id + "'>";
                html += datos.personas[id_letra][letra][i].telefono + "</span><br /></div></div>";
                if (i >= pag_actual * res_pagina && i < pag_actual * res_pagina + res_pagina - 3) {
                    $("#col1").append(html);
                } else {
                    $("#col2").append(html);
                }
            }
            $LetraAct = letra;
            $IdLetraAct = id_letra;
            if (datos.personas[id_letra][letra].length % res_pagina === 0) {
                $TotalPag = datos.personas[id_letra][letra].length / res_pagina - 1;
            } else {
                $TotalPag = Math.floor(datos.personas[id_letra][letra].length / res_pagina);
            }
            $("#divPaginas").empty();
            for (var i = 0; i <= $TotalPag; i++) {
                $("#divPaginas").append("<a href='#" + $LetraAct + ",p" + (i + 1) + "' id='pag" + i + "'>" + (i + 1) + "</a>");
            }
            if($TotalPag === -1) {
                $("#divPersonas").html("<div id='noRes'>No se ha encontrado ningún resultado.</div>");
            }
            if (hojear) {
                Hojear(true);
            }
        });
    }
    function GreyBox() {
        $("#form").fadeIn("fast", function() {
            $("#form").css("display", "block");
        });
        $("#formbg").fadeIn("fast", function() {
            $("#form").css("display", "block");
        });
    }
    function AbrirFormulario(crud, id_persona) {
        $("#form").html("<div id='frmOp'></div>\n\
                        <form id='frmPersonas' name='frmPersonas'>\n\
                        <label for='fldNombre'>Nombre:</label>\n\
                        <input type='text' id='fldNombre' name='fldNombre' autocomplete='off' />\n\
                        <label for='fldApellidos'>Apellidos:</label>\n\
                        <input type='text' id='fldApellidos' name='fldApellidos' autocomplete='off' />\n\
                        <label for='fldEdad'>Edad:</label>\n\
                        <input type='text' id='fldEdad' name='fldEdad' autocomplete='off' />\n\
                        <label for='fldTlf'>Teléfono:</label>\n\
                        <input type='text' id='fldTlf' name='fldTlf' autocomplete='off' />\n\
                        <input type='hidden' id='fldIdLetraN' name='fldIdLetraN' />\n\
                        <input type='hidden' id='fldLetraN' name='fldLetraN' />\n\
                        <input type='hidden' id='crud' name='crud' value='" + crud + "' />\n\
                        <input type='submit' id='btnEnviar' value='Enviar' /></form>\n\
                        <div id='frmAlert'></div>");
        if (crud === "C") {
            $("#frmOp").html("Agregar contacto");
        }
        if (crud === "U") {
            $("#frmOp").html("Modificar contacto");
            $("#fldNombre").val($("#nom" + id_persona).html());
            $("#frmPersonas").append("<input type='hidden' id='fldLetraAct' name='fldLetraAct' \n\
                                     value='" + RemoveAccents($("#fldNombre").val().substr(0, 1)) + "' />");
            $("#frmPersonas").append("<input type='hidden' id='fldIdLetraAct' name='fldIdLetraAct' \n\
                                     value='" + jQuery.inArray(RemoveAccents($("#fldNombre").val().substr(0, 1)), $aLetras) + "' />");
            $("#fldApellidos").val($("#ape" + id_persona).html());
            $("#fldEdad").val($("#eda" + id_persona).html());
            $("#fldTlf").val($("#tel" + id_persona).html());
            $("#frmPersonas").append("<input type='hidden' id='fldIdPersona' name='fldIdPersona' value='" + id_persona + "' />");
        }
    }
    function RemoveAccents(strAccents) {
        var strAccents = strAccents.split('');
        var strAccentsOut = new Array();
        var strAccentsLen = strAccents.length;
        var accents = 'ÁABCDÉEFGHÍIJKLMNÑÓOPQRSTÚUVWXYZ';
        var accentsOut = "aabcdeefghiijklmnñoopqrstuuvwxyz";
        for (var y = 0; y < strAccentsLen; y++) {
            if (accents.indexOf(strAccents[y]) !== -1) {
                strAccentsOut[y] = accentsOut.substr(accents.indexOf(strAccents[y]), 1);
            } else
                strAccentsOut[y] = strAccents[y];
        }
        strAccentsOut = strAccentsOut.join('');
        return strAccentsOut;
    }
    function Hojear(active) {
        if (active) {
            if ($TotalPag === -1) {
                $TotalPag = 0;
            }
            if ($PagActual === $TotalPag) {
                if ($IdLetraAct + 1 === $aLetras.length) {
                    $IdLetraAct = 0;
                    $LetraAct = $aLetras[$IdLetraAct];
                    $PagActual = 0;
                } else {
                    $IdLetraAct++;
                    $LetraAct = $aLetras[$IdLetraAct];
                    $PagActual = 0;
                }
            } else {
                $PagActual++;
            }
            $DelayHojear = setTimeout(function() {
                CargarPagina($LetraAct, $IdLetraAct, $PagActual, true);
            }, 1000);
        } else {
            clearTimeout($DelayHojear);
        }
    }
    $("body").on("click", "#divLetras a", function() {
        var letra = $(this).attr("id").substr(0, 1);
        var id_letra = $(this).attr("id").substr($(this).attr("id").search(/\d/));
        $PagActual = 0;
        CargarPagina(letra, id_letra, $PagActual);
    });
    $("#divDesplazar a").click(function() {
        var acc = $(this).attr("id");
        if (acc === "first") {
            $PagActual = 0;
        }
        if (acc === "prev" && $PagActual > 0) {
            $PagActual--;
        }
        if (acc === "next" && $PagActual < $TotalPag) {
            $PagActual++;
        }
        if (acc === "last") {
            $PagActual = $TotalPag;
        }
        CargarPagina($LetraAct, $IdLetraAct, $PagActual);
    });
    $("#divEditar a").click(function() {
        var acc = $(this).attr("id");
        if (acc === "update" || acc === "delete") {
            if ($("[id*=per]").hasClass("selected")) {
                var id_persona = $(".selected").attr("id").substr($(".selected").attr("id").search(/\d/));
                if (acc === "update") {
                    GreyBox();
                    AbrirFormulario("U", id_persona);
                }
                if (acc === "delete") {
                    var crud = "D";
                    $.ajax({type: "POST",
                        url: "procjson.php",
                        data: {'crud': crud, 'id_persona': id_persona, 'letra_act': $LetraAct, 'id_letra': $IdLetraAct},
                        success: function() {
                            CargarPagina($LetraAct, $IdLetraAct, $PagActual);
                        }
                    });
                }
            } else {
                console.log("no");
            }
        }
        if (acc === "add") {
            GreyBox();
            AbrirFormulario("C", -1);
        }
    });
    $("body").on("submit", "#frmPersonas", function(e) {
        e.preventDefault();
        $("#fldIdLetraN").val(jQuery.inArray(RemoveAccents($("#fldNombre").val().substr(0, 1)), $aLetras));
        $("#fldLetraN").val(RemoveAccents($("#fldNombre").val().substr(0, 1)));
        var fd = new FormData($("#frmPersonas")[0]);
        $.ajax({type: 'POST',
            url: "procjson.php",
            cache: false,
            data: fd,
            processData: false,
            contentType: false,
            success: function() {
                CargarPagina($LetraAct, $IdLetraAct, $PagActual);
                $("#form").css("display", "none");
                $("#formbg").css("display", "none");
            }
        });
        return false;
    });
    $("body").on("click", "#divPersonas [id*=p]", function() {
        $("#divPersonas [id*=per]").removeAttr("class");
        var id_persona = $(this).attr("id").substr($(this).attr("id").search(/\d/));
        $("#per" + id_persona).attr("class", "selected");
    });
    $("body").on("click", "#formbg", function() {
        $("#form").css("display", "none");
        $("#formbg").css("display", "none");
    });
    $("body").on("click", "#divPaginas a", function() {
        var id_pagina = $(this).attr("id").substr($(this).attr("id").search(/\d/));
        CargarPagina($LetraAct, $IdLetraAct, id_pagina);
    });
    $("#divBusqueda a").click(function() {
        var Acc = $(this).attr("id");
        if (Acc === "hojear") {
            Hojear(true);
        }
        if (Acc === "search") {

        }
    });
    $("body").on("mouseover", "[id*=per]", function() {
        Hojear(false);
    });
    $("#form").click(function(e) {
        e.stopPropagation();
    });
    $("a").click(function(e) {
        return false;
        e.preventDefault();
    });
</script>

2 个答案:

答案 0 :(得分:1)

尝试禁用缓存:

$.ajax({type: 'POST',
    url: "procjson.php",
    cache: false
    //the rest
});

答案 1 :(得分:0)

这是您在本网站上使用的所有javascript代码吗?因为如果是,请尝试将代码包装成这样:

$(document).ready(function() {
    $("body").on("submit", "#frmPersonas", function(e) {
        $("#fldIdLetraN").val(jQuery.inArray(RemoveAccents($("#fldNombre").val().substr(0, 1)), $aLetras));
        $("#fldLetraN").val(RemoveAccents($("#fldNombre").val().substr(0, 1)));
        var fd = new FormData($("#frmPersonas")[0]);
        $.ajax({type: 'POST',
            url: "procjson.php",
            data: fd,
            processData: false,
            contentType: false,
            success: function() {
                CargarPagina($LetraAct, $IdLetraAct, $PagActual);
                $("#form").css("display", "none");
                $("#formbg").css("display", "none");
            }
        });
        e.preventDefault();
    });
});

然后jquery将在DOM准备就绪之前等待,然后再附上eventhandler等,这可能是为什么它正在进行刷新的原因(因为你的浏览器缓存dom可以比第一次加载时更快就准备好了)。