Autor
|
Tema: !Ayuda, ajax no funciona,en express.js (Leído 7,278 veces)
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
<!DOCTYPE html> <script src="jquery-3.1.0.js" type="text/javascript"></script> <form class="formulario"> <p><input type="text "id="clickme" value="n o m b r e"></p> <p><input type="text "id="pass" value=" c o n t r a s e n a"></p> <input type="submit" id="botonEnviar" value="enviar"> var id="idUsuario"; $('.formulario').submit(function(event) { form_submit(); return false; }); function form_submit() { var request = $.ajax({ url: 'login.php', type: 'POST', data: { keystrokes : id }, dataType: 'json', contentType:'application/json', }); request.done(function(response) { alert((response.status ? "Success: " : "Error: ") + response.message); if(response.status) { window.location.href = 'login.php'; } else { window.location.href = ''; } }); request.fail(function(jqXHR, textStatus) { alert("Server request failed: " + textStatus); window.location.href = ''; }); request.error(function(result, sts,err) { alert(err+":"+sts); }); }
<?php $resultado = $_POST['keystrokes']; echo $resultado; ?>
el error que me sale es parseerror, como lo soluciono ?
|
|
« Última modificación: 31 Agosto 2016, 01:19 am por .rn3w. »
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
el error que sale es "server request failed parseerror", ayuda no soy muy bueno con desarrollo web
saludos...
|
|
|
En línea
|
|
|
|
#!drvy
|
Cuando declaras dataType y contentType en el AJAX de jQuery, te debes asegurar tanto de enviar los datos en el formato correcto, como de recibirlos de dicha forma. En este caso, declaras que lo que estas enviando es JSON y lo que esperas recibir es también JSON. PHP sin embargo responde de forma pura y ademas te tira un error porque ese parámetro no es reconocible para PHP (envías una cadena JSON la cual PHP no puede tratar). PHP no conoce esa forma de recibir datos. Lo mejor que puedes hacer es quitar el contentType:'application/json', de tu código para que detecte automáticamente el formato por el que mandarlo. Si lo quitas, PHP reconocerá como POST las variables que mandes y podrás usar el array iterator para obtener el valor de keystrokes. Para devolverlo, lo mismo, debes hablar el mismo idioma por el que te fue pedido.. lo debes devolver en JSON. La mejor forma seria: header('Content-Type: application/json'); $resultado = ( is_array($resultado) ? $resultado : array($resultado) );
En la primera linea, le dices al navegador que lo que le vas a dar es contenido JSON. En la segunda, te aseguras que $resultado es tratado como array para que json_encode funcione. Y en la tercera, haces que el script "muera" devolviendo la variable $resultado como JSON. Resumen: - Quitamos la linea contentType del javascript. - Cambiamos la forma en la que PHP devuelve el resultado para que jQuery lo trate bien y no le haga bullying. Otras cosas a considerar: - No uses .request.error() o al menos, no de esa forma. Es muy bruto. Usa solo .fail o asegúrate de que solo tire el alert() si realmente hay un error. La forma en la que esta puesto, tirara un alert() aunque no haya error. - Para hacer debug correctamente quita las re direcciones y usa console.log()- Deberías hacer que jQuery se cargue al final del body, igual que el resto de tu script. Saludos
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
muchas gracias por responder, me ayudo mucho, pero aun sigue saliendo error "undefined" borre el contentType del javascript. modifique el .php <?php header('Cache-Control: no-cache, must-revalidate'); header('Content-type: application/json'); $resultado = $_POST['keystrokes']; $resultado = ( is_array($resultado) ? $resultado : array($resultado) ); ?>
muchas gracias, espero que puedan ayudarme
|
|
« Última modificación: 29 Agosto 2016, 16:25 pm por .rn3w. »
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
ayuda, yo se que esto es simple para ustedes, pero a mi me esta costando mucho, no se que pasa, como solucionarlo
!!!Ayuda
|
|
|
En línea
|
|
|
|
WHK
|
Hola amigo, te daré unos tips: Cuando te aparezca un error fijate en que línea te aparece, por lo general los errores dicen el nombre del archivo mas el número de la línea, con eso te podrás dar mas cuenta del problema que debieras tener. Fijate que en una parte del código dice "response.status", realmente existe "status"?. PHP retorna un valor no? pues ese valor es un array o un objeto, en tu caso cuando envías la petición post desde tu javascript estás enviando el valor "keystrokes : id" y estás escribiendo el mismo resultado desde php, por lo tanto no tienes la variable "status" declarada en ningún lado, por eso dice undefined porque status no está definido. "response" equivale a lo que php entregó, en este caso no es un objeto $resultado = ( is_array($resultado) ? $resultado : array($resultado) ); die(json_encode($resultado, true)); Lo único que haces en es alínea es entregar el resultado como array. Digamos que $resultado equivale a "hola", entonces el resultado que entrega php queda así: Para solucionar esto, desde php debes crear la variable llamada status y otro donde lleve el valor que desees entregar, por ejemplo: die(json_encode(array('status' => 1, 'resultado' => $resultado)), true); Entonces tendrás un resultado así: { "status": 1, "resultado": "hola" } Ahora desde javascript debes procesar "status" y también "resultado". Prueba con esto: <?php // Headers header('Content-Type: application/json'); $resultado = (string)$_POST['keystrokes']; 'status' => 1, 'result' => $resultado ), true); } ?><!DOCTYPE html> <html> <head> <title>login</title> <script src="jquery-3.1.0.js" type="text/javascript"></script> <script type="text/javascript"> var id = 'idUsuario'; // Bind the form $('.formulario').submit(function(event) { // Prevent sent the form event.preventDefault(); var request = $.ajax({ url : 'login.php', type : 'POST', data : { keystrokes : id }, dataType : 'json', contentType :'application/json', }); request.done(function(response) { if(response.status) { alert('Success: ' + response.message); window.location.href = 'login.php'; } else { alert('Error: ' + response.message); window.location.href = window.location.href; } }); request.fail(function(jqXHR, textStatus) { alert("Server request failed: " + textStatus); window.location.href = ''; }); request.error(function(result, sts,err) { alert(err+":"+sts); }); }); </script> </head> <body> <form class="formulario"> <p><input type="text "id="clickme" value="n o m b r e"></p> <p><input type="text "id="pass" value=" c o n t r a s e n a"></p> <input type="submit" id="botonEnviar" value="enviar"> </form> </body> </html>
Saludos.
|
|
« Última modificación: 30 Agosto 2016, 03:24 am por WHK »
|
En línea
|
|
|
|
flacc
|
Yo seguiría las recomendaciones de los compañeros de mas arriba, ellos saben de lo que hablan, de todas formas cuéntanos como te va con el tema, y recuerda, te podemos guiar, pero tu debes alcanzar la meta. Para entrar en detalles mas profundos con javascript, undefined es un estado (por decirlo de alguna forma) que puede aparecer por 2 razones: - La variable fue declarada (con var o con let) pero no inicializada.
- Se intenta acceder a una variable que no a sido declarada.
Cuando undefined aparece porque la variable no fue inicializada el error debiera ser de referencia (ReferenceError, que es capturable con try catch), por otra parte, cuando se intenta acceder a una variable no definida (valga la redundancia), javascript nos notifica que la variable no existe con undefined (indefinida). Ahora bien, cuando evaluamos expresiones con undefined se comporta de la siguiente manera: - Para cosas con números dirá que no es un número (NaN)
- En expresiones booleanas será un false.
De acuerdo a lo que comento, podemos realizar las siguientes operaciones con variables y undefined: // definida pero no inicializada var variable; if (variable) // la variable es undefined, la evaluamos como booleana y se comporta como false // codigo que nunca se ejecuta if (otraVariable) // variable no definida, por lo tanto tambien es undefined y se comportara como false // codigo que nunca se ejecuta if (variable === undefined) // variable no definida es igual a undefined usando la coomparacion por tipos // codigo que nunca se ejecuta if (variable == undefined) // funciona tambien para comparaciones simples // codigo qeu nunca se ejecuta // tambien se puede obtener el tipo de undefined como string y compararlo if (typeof variable == 'undefined') // typeof devuelve el tipo de variable (undefined) como string // codigo que nunca se ejecuta
Bien, creo que lo he explicado relativamente entendible, ahora bien, el tema de undefined también se aplica a los arreglos con sub incides no definidos, y una cosa muy importante a la hora de jugar con esto, es que undefined es asignable (entre comillas). var arreglo = [1]; console.log( arreglo[1] ); // el sub indice 0 existe, pero el sub indice 1 no, por lo tanto mostrara undefined var algo = arreglo[1]; // esta es una curiosidad que no puedo explicar /* * No lo he investigado, pueden ser 2 cosas, primero que como es undefined, la variable algo no se va a inicializar con undefined, * ciertamente el compilador obtimiza varias cosas en el background, pero no se si asignará undefined a una variable que ya es undefined. * Sería bueno que sepa que pasa ahí lo explicara. */
Espero te sirva la explicación de undefined. Saludos
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
hice algunos cambios - Deberías hacer que jQuery se cargue al final del body, igual que el resto de tu script. en el js $(window).on('load', function() { y en ves de type lo puse method y funciono gracias amigos, en realidad muchas gracias
|
|
« Última modificación: 30 Agosto 2016, 15:01 pm por .rn3w. »
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
ahora estoy intentado implementar ajax en express.js este es el layout.jade doctype html html head title= title link(rel='stylesheet', href='/stylesheets/style.css') script(src="/javascripts/jquery-1.9.1.js") script(type="text/javascript", src='/javascripts/forMain-Script.js') body block content
mi formulario extends layout block content h1= title form(id="formulario") div.input span.label Description textarea(name="description", cols="100", rows="3") div.actions input(id="botonEnviar",type="submit", value="enviar")
este es mi js $(window).on('load', function() { var id = 'idUsuario'; $('#botonEnviar').click(function(event) { event.preventDefault(); var request = $.ajax({ method : 'POST', url : 'http://localhost:3000/servidor', data : { keystrokes : id }, dataType : 'json' }); request.done(function(response) { if(response.status) { alert('Success: ' + response.result + "\n Message: " + response.message); window.location.href = 'http://localhost:3000/servidor'; } else { alert('Error: ' + response.message); window.location.href = window.location.href; } }); request.fail(function(jqXHR, textStatus) { alert("Server request failed: " + textStatus); window.location.href = ''; }); }); });
y en mi app.js puse este codigo que encontre en https://gist.github.com/diorahman/1520485app.post('/servidor', function(req, res){ var obj = {}; console.log('body: ' + JSON.stringify(req.body)); res.send(req.body); }); app.listen(3000);
me sale error 404 por consola, y por alert sale error en el app.js siento que es el error, ayuda!!!
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
el app.js modifique de la siguiente manera app.get('/', function (req, res){
res.render('ajax.ejs');
});
app.post('/servidor', express.bodyParser(), function (req, res){
console.log(req); console.log('req received'); res.redirect('/');
}); pero aun no funciona,
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
div ( tabless ) no funciona a el mozilla con ajax Java.
.NET (C#, VB.NET, ASP)
|
surfrio
|
2
|
3,014
|
31 Marzo 2008, 20:18 pm
por surfrio
|
|
|
jquery ajax error handler, no funciona
Desarrollo Web
|
bomba1990
|
2
|
4,208
|
15 Agosto 2011, 06:45 am
por bomba1990
|
|
|
funciona Ajax en dispositivos moviles?
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
Hadess_inf
|
4
|
5,241
|
22 Enero 2013, 20:38 pm
por #!drvy
|
|
|
No funciona puerto PCI Express
Hardware
|
Ganejash
|
2
|
9,543
|
25 Mayo 2013, 15:00 pm
por Aprendiz-Oscuro
|
|
|
no me funciona el controlador en express
Desarrollo Web
|
Beginner Web
|
3
|
2,981
|
16 Junio 2020, 06:22 am
por [u]nsigned
|
|