我有一个通过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>
答案 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可以比第一次加载时更快就准备好了)。