Tengo un formulario de registro y lo estoy utilizando $.ajax
para enviarlo.
Esta es mi solicitud AJAX:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
En mi archivo submit1.php verifico la existencia de campos de dirección de correo electrónico y nombre de usuario en la base de datos. Deseo mostrar un mensaje de error si esos valores existen sin una actualización de la página .
¿Cómo puedo agregar esto a la devolución de llamada exitosa de mi solicitud AJAX?
javascript
jquery
ajax
codingbbq
fuente
fuente
Respuestas:
El resultado probablemente no esté en formato JSON, por lo que cuando jQuery intenta analizarlo como tal, falla. Puede detectar el error con la
error:
función de devolución de llamada.De todos modos, no parece necesitar JSON en esa función, por lo que también puede eliminar la
dataType: 'json'
fila.fuente
dataType:'text'
dataType:
no se especifica a, perourl:
termina en.json
.$.post
suministro de aliasjson
como tipo de datos sin json real proveniente del servidor no desencadena lasuccess
devolución de llamadaAunque el problema ya está resuelto, agrego esto con la esperanza de que ayude a otros.
Cometí el error e intenté usar una función directamente como esta (éxito: OnSuccess (productID)). Pero primero debe pasar una función anónima:
Si no utiliza una función anónima como envoltorio, se llama a OnSuccess incluso si el servicio web devuelve una excepción.
fuente
Intenté eliminar la fila dataType y no funcionó para mí. Eludí el problema usando "complete" en lugar de "éxito" como devolución de llamada. La devolución de llamada exitosa todavía falla en IE, pero dado que mi script se ejecuta y completa de todos modos, eso es todo lo que me importa.
en jQuery 1.5 también puedes hacerlo así.
fuente
complete
siempre se llamará independientemente de si la llamada ajax fue exitosa o no, mientras quesuccess
solo se llamará si el servidor web responde con un200 OK
encabezado HTTP (todo está bien).Asegúrese de que no está imprimiendo (echo o print) ningún texto / dato antes de generar sus datos formateados JSON en su archivo PHP. Eso podría explicar que obtienes un -sucessfull 200 OK- pero tu evento de éxito aún falla en tu javascript. Puede verificar qué está recibiendo su script al consultar la sección "Red - Respuesta" en firebug para POST submit1.php.
fuente
Ponga un
alert()
en susuccess
devolución de llamada para asegurarse de que se está llamando.Si no es así, es simplemente porque la solicitud no tuvo éxito en absoluto, a pesar de que logras llegar al servidor. Las causas razonables pueden ser que expire un tiempo de espera o que algo en su código php arroje una excepción.
Instale el complemento firebug para firefox, si aún no lo ha hecho, e inspeccione la devolución de llamada AJAX. Podrá ver la respuesta y si recibe o no una respuesta exitosa (200 OK). También puede poner otro
alert()
en lacomplete
devolución de llamada, que definitivamente debe invocarse.fuente
success
, entonces no es un éxito. Dado que la respuesta es 200 OK, la respuesta de Tatu parece razonable, pero para una mayor resolución de problemas, puede usar otro evento, llamadocomplete
que siempre se invoca, independientemente de si una solicitud es exitosa o no (success
solo ocurre si la solicitud es exitosa).complete: function (xhr, status) { alert('complete: '+status); }
Tuve el mismo problema sucede porque se
javascript
esperajson
que el tipo de datos devuelva datos. pero si usas echo o print en tu php esta situación ocurre. Si utiliza laecho
funciónphp
para devolver datos, simplemente elimine eldataType : "json"
trabajo bastante bien.fuente
Estaba devolviendo JSON válido, obteniendo una respuesta de 200 en mi devolución de llamada "completa", y podía verlo en la consola de red de Chrome ... PERO no había especificado
una vez que lo hice, a diferencia de la "respuesta aceptada", eso solucionó el problema.
fuente
Estoy usando XML para llevar el resultado desde el php en el servidor a la página web y he tenido el mismo comportamiento.
En mi caso, la razón fue que la etiqueta de cierre no coincidía con la etiqueta de apertura.
fuente
Tuve este problema al usar una función ajax para recuperar la contraseña de usuario de Magento. El evento de éxito no se estaba disparando, luego me di cuenta de que había dos errores:
Entonces, cada vez que traté de usar json_eoncde () para codificar la matriz de retorno, la función no funcionaba porque uno de sus índices tenía caracteres no utf, la mayoría de ellos acentuándose en palabras portuguesas brasileñas.
fuente
Traté de devolver la cadena del controlador, pero ¿por qué el control que regresa al bloque de error no es exitoso de ajax?
fuente
Enfrenté el mismo problema al consultar el controlador que no devuelve una respuesta de éxito, cuando se modificó mi controlador para devolver el problema del mensaje de éxito. nota utilizando el marco Lavalite. antes de:
esto funcionó para mí
fuente
Tuve el mismo problema, lo resolví de esa manera: Mi ajax:
Okay. El problema no es con json sino solo con la respuesta de php. Antes: mi respuesta de php fue:
Ahora:
Ahora mi éxito trabajando. PD. Lo siento si algo está mal pero es mi primer comentario en este foro :)
fuente
en mi caso el error fue que esto estaba en el lado del servidor y por eso estaba devolviendo un html
fuente
Agregue la devolución de llamada de 'error' (al igual que 'éxito') de esta manera:
Entonces, en mi caso, vi en la consola:
fuente
Debe declarar la devolución de llamada de éxito y error. Agregando
debería solucionar el problema
fuente
La devolución de llamada exitosa toma dos argumentos:
También asegúrese de que
submit1.php
establece el encabezado de tipo de contenido adecuado:application/json
fuente
success
tome dos argumentos parece completamente irrelevante para la pregunta. Puede pasar cualquier cantidad de parámetros a una función de JavaScript, independientemente de cuántos acepte en su declaración, por lo que definitivamente no es la causa de estos problemas, y dado que ninguno de los valoresdata
otextStatus
se están utilizando en la devolución de llamada exitosa, parece que No hay una buena razón para declararlos en la función.