Ajax: ¿cómo hacerlo?
Resuelto
sevs
-
sevs -
sevs -
Hola,
Estoy buscando configurar un script AJAX que me permita guardar los datos de un textarea.
La pregunta es, ¿cómo puedo recuperar correctamente la variable en mi PHP?
Configuración: Windows / Chrome 54.0.2840.99
Estoy buscando configurar un script AJAX que me permita guardar los datos de un textarea.
La pregunta es, ¿cómo puedo recuperar correctamente la variable en mi PHP?
Configuración: Windows / Chrome 54.0.2840.99
4 respuestas
-
Bueno....
Finalmente decidí programar.
Ya.. no había visto que utilizabas ckeditor. (lo cual no es lo mismo que con un simple textarea).
En cuanto al HTML, eso es lo que da:<html> <head> <meta charset="utf-8"> <title>news</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> <!-- Asegúrate de que la ruta a CKEditor sea correcta. --> <script src="ckeditor.js"></script> </head> <body onload='timer()'> <form action="Mail3" method="POST"> <textarea name="editor1" id="editor1" rows="10" cols="80" placeholder="Introduce tu mensaje aquí"></textarea> <input type="submit" name="soumettre" value="enviar"> </form> <input id="infosMsg" value="" style="width:200px;"> <script text="javascript"> var ck = CKEDITOR.replace('editor1').on('change', function(e) { if (document.activeElement.nodeName == "IFRAME") { var thisHTML = e.editor.getData(); var tempDiv = $('<div>').html(thisHTML); thisText = tempDiv.text(); note(thisText); } }); function note(value){ var data = {'text':value}; var urlAjx = "brouillon.php"; //tiempo de pruebas console.log(" Nota = " + value ); //envío de ajax $.ajax({ async : false, type: "POST", url: urlAjx, data: data, dataType: 'json', success: function(reponse) { //console.log(reponse); $("#infosMsg").val(reponse.resultat); }, error: function(xhr, status, error) { var err = eval("(" + xhr.responseText + ")"); alert(err.Message); } }); } </script> </body> </html>
Y para el PHP:<?php //mostrar errores php error_reporting(E_ALL); $result = array(); //variable de retorno al final del script //Recuperación "limpia" de variables $text = isset($_POST['text']) ? $_POST['text'] : ''; // ----- /!\ ------- //Variables a modificar con tu información $bddName = "mabdd"; $user = "root"; $pwd = ""; //Conexión a la BDD try{ $bdd = new PDO('mysql:host=localhost;dbname='.$bddName.';charset=utf8', $user, $pwd); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { $result['erreur'][] = 'Error : ' . $e->getMessage(); } $sql = 'UPDATE test set message= :txt'; $datas = array(":txt"=>$text); if($bdd){ try{ $req = $bdd->prepare($sql); $req->execute($datas); $result['resultat'] = 'Borrador guardado '.date(' h:i:s A'); }catch(Exception $a){ $result['erreur'][] = "¡Error! ".$e->getMessage(); $result['resultat'] = "La inserción falló" ; $result['erreur'][] = $_POST; } }else{ $result['erreur'][] = "Problema de conexión a la BDD :".$bddName; } //Devolvemos el resultado en json echo json_encode($result); ?>
NB: Recuerda modificar tus Variables con tu información de conexión a la BDD
Luego...
[]ATENCIÓN: Debes tener tus archivos php codificados en UTF8 así como tu BDD.
Ve aquí: https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Cordialmente,
Jordane-
Muchas gracias,
Pero al final lo hice así. Lo siento, acabo de ver tu publicación<script> $(document).ready(function(){ function borrador(){ var miTexto = $('#editor1').val(); $.ajax({ method: "POST", url: "borrador.php", data: {msg:miTexto}, success: function(data){ $('.result').html(data); } }); }; setInterval(function(){ borrador(); }, 10000); }); </script>
Sin embargo, me pregunto cómo adaptar tu script para ckeditor para que sea compatible. Porque aquí no lo es y tengo que quitar el editor. -
-
-
Una solicitud AJAX es una solicitud HTTP clásica, simplemente se ejecuta de forma asíncrona. Puedes enviar parámetros a través de AJAX así:
$.ajax({
type: $(this).attr("method"), // POST O GET
url: $(this).attr("action"), // URL A LLAMAR
data: $(this).serialize(), //PARÁMETROS
success: OnSuccess // CALLBACK
});.
Para recuperar el valor en PHP, basta con proceder de manera normal.
--
- "Si no está en la computadora, no existe."-
Gracias doua por tu respuesta.
Pero, ¿cómo modificar esto para que todo esté automatizado?
He leído en internet que es posible hacer copias de un mensaje que estamos escribiendo con ajax.<script text="javascript"> function timer() { comp=(setTimeout("go()",5000)); } function getXhr(){ var xhr = null; if(window.XMLHttpRequest) // Firefox y otros xhr = new XMLHttpRequest("post","",true); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest no soportado por el navegador alert("Su navegador no soporta objetos XMLHTTPRequest..."); xhr = false; } return xhr } function go() { var xhr = getXhr() // Definimos qué vamos a hacer cuando tengamos la respuesta xhr.onreadystatechange = function() { // Solo hacemos algo si hemos recibido todo y el servidor está ok if(xhr.readyState == 4 && xhr.status == 200) { var html = xhr.responseText; document.getElementById('cible').innerHTML = html; } } xhr.open("POST","brouillon",true); xhr.send(null); setTimeout('go()',5000); } </script>
Gracias a ti -
-
Gracias por tu fragmento de código. Pero dado que soy una joven programadora en ajax, no entiendo qué función puedo utilizar para automatizar el registro a intervalos regulares y recuperar todo para guardarlo en mi base de datos. Dado que ni siquiera está llamando a mi script php, ya no veo el eco que hice.
-
-
Hola,
¿Qué función puedo poner para automatizar el registro a intervalos regulares?
Si por "intervalo regular" te refieres a: a medida que el usuario escribe... entonces puedes usar onkeyUp o onKeyPress en tu textarea
https://html.com/attributes/textarea-onkeypress/
De lo contrario, si realmente quieres hacerlo a intervalos regulares... en javascript existen las funciones settimeout y setInterval
Sin embargo, olvidaste enviar los datos a tu script php (debes incluir las variables al enviar)xhr.send(tesparams);
- tesparams puede tener la forma:
var text = document.getElementById('id_de_ton_textarea').value; var tesparams = "nomdelavariablequetuveux="+text ;
después... como sugiere douarfyduck .. es preferible usar ajax en JQUERY
Aquí tienes un ejemplo completo: https://forums.commentcamarche.net/forum/affich-33258760-remplir-un-formulaire-dynamiquement-en-fonction-d-une-combobox#2
--
Atentamente,
Jordane -
Sigo nadando...
Para ser honesta, esto ya no es nadar, es como si me estuviera ahogando...
No entiendo dónde está mi error. Domina perfectamente el php, y reconozco que tengo dificultades con el js
El código en la página html<html> <head> <meta charset="utf-8"> <title>noticias</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> <!-- Asegúrate de que la ruta a CKEditor sea correcta. --> <script src="ckeditor.js"></script> </head> <body onload='timer()'> <form action="Mail3" method="POST"> <textarea name="editor1" id="editor1" rows="10" cols="80" > Escriba su mensaje aquí </textarea> <script> CKEDITOR.replace( 'editor1' ); </script> <script text="javascript"> $(document).ready(function() { $("#editor1").bind("keypress", function() { note(this.value); }); function note(value) { $.ajax({ async : false, type: "POST", url: "./brouillon.php", data: { 'text' : value }, success: function(data) { $("#editor1").html(html); } }); } }); </script> <input type="submit" name="soumettre" value="enviar"> </form> </body> </html>Aún en la página de prueba, porque en principio quería hacer las copias de seguridad antes de ponerlo en línea
y el de la página de tratamiento que he nombrado borrador <?php header('Content-type: application/json; charset=utf-8'); function note() { $bdd = new PDO('mysql:host=localhost;dbname="";charset=utf8', '', ''); $req = $bdd->prepare('UPDATE test set message= ?'); $req->execute(array($_GET['text'])); if($requete) { echo('Borrador guardado'.date(' h:i:s A').'') ; } else { echo("La inserción ha fallado") ; } ?>
Por lo general, hago una inclusión de mis datos de conexión, lo reintroduciré todo correctamente cuando entienda bien el truco.
Siendo franca, no quiero un código hecho; de lo contrario no aprenderé. Solo una guía sobre mis errores
Gracias por todo el tiempo que me dedicas.-
-
-
<?php //mostrar errores de php error_reporting(E_ALL); $result = array(); //variable de retorno al final del script //recuperación "limpia" de las variables $text = isset($_POST['text']) ? $_POST['text'] : ''; //Conexión a la BDD try{ $bdd = new PDO('mysql:host=localhost;dbname="";charset=utf8', '', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { $result['erreur'][] = 'Error: ' . $e->getMessage(); } $sql = 'UPDATE test set message= :txt'; $datas = array(":txt"=>$text); try{ $req = $bdd->prepare($sql); $req->execute($datas); }catch(Exception $a){ $result['erreur'][] = "¡Error! ".$e->getMessage(); } if($requete) { $result['resultat'] = 'Borrador guardado '.date(' h:i:s A'); } else { $result['resultat'] = "La inserción falló" ; } //Devolvemos el resultado en json echo json_encode($result); ?> -
-
-