Ajax: ¿cómo hacerlo?

Resuelto
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

4 respuestas

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    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
    1
    1. sevs
       
      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.
      0
    2. sevs
       
      resuelto de chez resuelto
      Gracias Jordane por tu ayuda
      0
  2. douarfyduck Mensajes publicados 85 Fecha de registro   Estado Miembro Última intervención   24
     
    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."
    0
    1. sevs
       
      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
      0
    2. douarfyduck Mensajes publicados 85 Fecha de registro   Estado Miembro Última intervención   24
       
      Con JQUERY y AJAX :

      <textarea id="area></textarea>
      <script text="javascript">
      $(document).ready(function(){
      $("#area").on("keypress",function(){
      //Solicitud AJAX
      })

      })
      </script>
      0
    3. sevs
       
      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.
      0
  3. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    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
    0
    1. sevs
       
      Buenas noches Jordane45;
      Primero que nada, gracias por todos tus consejos. Tu función onkeypress me interesa, así que investigué http://stackoverflow.com/questions/33944951/save-content-of-textarea- ¿Es como aquí? ¿O realmente estoy partiendo de unas bases muy malas al seguir este tutorial?
      0
      1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > sevs
         
        Sí, no está tan mal.
        Como puedes ver, utiliza JQUERY y el método AJAX.
        0
      2. sevs > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
         
        Gracias, intentaré hacer eso; y volveré a contactarte si tengo algún problema o si se soluciona.
        Gracias, de todos modos, por orientarme. Es complicado, pero me facilitas las cosas :)
        0
    2. sevs
       
      Lo siento
      0
  4. sevs
     
    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.
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      En tu javascript Ajax -> POST
      en tu php $_GET
      ... es normal que no funcione.
      0
    2. sevs > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
       
      Idiota soy yo.... Lo cambié en uno pero no en el otro. ¿El código te parece correcto? Porque todavía no funciona...
      0
    3. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
       <?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); ?> 
      0
    4. sevs > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
       
      Gracias por el código, pero lo haré de otra manera, al menos intentaré porque se niega a guardar.
      Gracias de todos modos por todo el tiempo dedicado :)
      0
    5. sevs
       
      $("#editor1").on("keypress", function() {
      0