Shabán
Estoy validando un formulario con ajax y jquery en el área de texto de comentarios de publicaciones de WordPress para expresiones regulares. Pero hay un problema cuando quiero alertar un mensaje de error con retorno falso. Funciona bien con datos no válidos y muestra una alerta y no se envía. Pero cuando pongo datos válidos, el formulario no se envía. Puede ser un problema con el retorno falso.
Intenté hacer variable y almacenar verdadero y falso y aplicar la condición fuera del bloque de éxito de ajax, pero no funcionó para mí.
Funciona bien cuando lo hago con core php, ajax, jquery pero no funciona en WordPress.
Aquí está mi código ajax, jquery.
require 'nmp_process.php';
add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');
add_action('wp_head', 'no_markup');
function no_markup() {
?>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('form').submit(function (e) {
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: 'action=nmp_process_ajax&comment=" + comment,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can"t Put Code Here.");
return false;
}
}
});
return false;
});
});
</script>
<?php
}
Y estoy usando wordpress wp_ajax hook.
Y aquí está mi código php.
<?php
function nmp_process_func (){
$comment = $_REQUEST['comment'];
preg_match_all("/(->|;|=|<|>|{|})/", $comment, $matches, PREG_SET_ORDER);
$count = 0;
foreach ($matches as $val) {
$count++;
}
echo $count;
wp_die();
}
?>
Gracias por adelantado.
Shabán
Finalmente, lo descubrí por mi cuenta.
Sólo hay que poner async: false
en llamada ajax. Y ahora está funcionando bien. Además, cree una variable vacía y almacene valores booleanos en ella y luego, después de la llamada ajax, devuelva esa variable.
Aquí está mi código anterior:
require 'nmp_process.php';
add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');
add_action('wp_head', 'no_markup');
function no_markup() {
?>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('form').submit(function (e) {
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: 'action=nmp_process_ajax&comment=" + comment,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can"t Put Code Here.");
return false;
}
}
});
return false;
});
});
</script>
<?php
}
Y el problema que resolví es,
Nuevo código
var returnval = false;
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
async: false, // Add this
data: 'action=nmp_process_ajax&comment=" + comment,
por qué lo uso
Async:False
mantendrá la ejecución del código de descanso. Una vez que obtenga la respuesta de ajax, solo entonces, se ejecutará el resto del código.
Y luego simplemente almacene Boolean en una variable como esta,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can"t Put Code Here.");
returnval = false;
} else {
returnval = true;
}
}
});
// Prevent Default Submission Form
return returnval; });
Eso es todo.
Gracias por las respuestas por cierto.
madalinivascu
Intente hacer una llamada ajax con un evento de clic y, si los campos son válidos, envíe el formulario:
jQuery(document).ready(function () {
jQuery("input[type=submit]").click(function (e) {
var form = $(this).closest('form');
e.preventDefault();
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: {'action':'nmp_process_ajax','comment':comment},
success: function (res) {
var count = parseInt(res);
if (count > 10) {
alert("Sorry You Can't Put Code Here.");
} else {
form.submit();
}
}
});
});
});
nota: ¡usted necesita llamar a esa función en php y devolver solo el conteo!
En lugar de enviar el formulario, vincule el botón Enviar a un evento de clic.
jQuery("input[type=submit]").on("click",function(){
//ajax call here
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: 'action=nmp_process_ajax&comment=" + comment,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can"t Put Code Here.");
return false;
}else{
jQuery("form").submit();
}
}
});
return false;
})
Además, también es una buena idea ponerle tipo de retorno a su solicitud ajax. Hazme saber si esto funciona.
-
Entonces, incluso si está ingresando datos válidos, ¿no puede enviar el formulario?
– Harry Bomrah
19 de noviembre de 2015 a las 7:45
-
el formulario se presenta en ambos casos en datos válidos o no válidos.,. En caso de datos no válidos, aparece una alerta emergente y cuando hago clic en Aceptar, se envía el formulario.
– Shabán
19 de noviembre de 2015 a las 7:54
-
¿Por qué usar un evento de clic en un botón, si simplemente puede escuchar el evento de envío del formulario? ¿Qué sucede si alguien envía el formulario presionando Intro en uno de los campos de entrada?
– wawa
19 de noviembre de 2015 a las 8:04
el problema es con
return false
. devolver falso detendrá el envío de su formulario. que yo sepa, desea validar con ajax y, si está validado, desea enviar el formulario. ¿Correcto?– Harry Bomrah
19 de noviembre de 2015 a las 7:27
Creo que deberías quitar el segundo.
return false;
– Muhammad Bilal
19 de noviembre de 2015 a las 7:29
Si claro. Y cuando no son datos válidos, no debe enviar el formulario.
– Shabán
19 de noviembre de 2015 a las 7:30
lo intenté. Funciona bien con datos válidos pero, por otro lado, cuando hay datos no válidos, también se envía con alerta.
– Shabán
19 de noviembre de 2015 a las 7:34
que tienes en tu
$matches
¿formación?– madalinivascu
19 noviembre 2015 a las 8:00