Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema con AJAX ed invio dati in background

    Buonasera,
    premetto che sono alle prime armi con javascript e st� cercando di creare una funzione per l'invio di alcune informazioni in background derivanti dalla compilazione di un forms. il problema � che lo script lavora correttamente ma al termine mi apre la pagina sendlike.php invice di rimanere sull'attuale pagina. i forms sono generati con il seguente php:

    Codice PHP:
    while ($riga mysql_fetch_array($qryMYSQL_ASSOC)) {
    echo 
    '<form method="POST" name="like'.$riga['id_photo'].'"action ="sendlike.php" onsubmit="InviaDati(); return false;">';
    echo 
    '<input type="input" name="id_user" value="'.$id_user.'">';
    echo 
    '<input type="input" name="id_photo" value="'.$riga['id_photo'].'">';
    echo 
    '<input id="'.$riga['id_photo'].'" class="like"  type="submit" name="add_like" value="'.$qry_likes.'">';
    echo 
    '</form>';

    La funzione che si occupa di inviare il dato in background � la seguente.
    codice:
    <script>
    function dati() {
      $(document).ready(function() {
        $('.like').click(function(){
          var recupero_id = "like" + $(this).attr("id");   
          return recupero_id;
        });
     });     
    }
    
    function PreparaDati(){
      stringa = "";
        var form = document.forms[recupero_id];
        var numeroElementi = form.elements.length;
    
    
        for(var i = 0; i < numeroElementi; i++){
          if(i < numeroElementi-1){
            stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value)+"&";
          }else{
            stringa += form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
          }  
        }
    }
          
    function AJAXReq(method,url,bool){
      if(window.XMLHttpRequest){
        myReq = new XMLHttpRequest();
      } else 
        if(window.ActiveXObject){
          myReq = new ActiveXObject("Microsoft.XMLHTTP");    
            if(!myReq){
              myReq = new ActiveXObject("Msxml2.XMLHTTP");
            }
        }
        if(myReq){
          execfunc(method,url,bool);
        }else{
          alert("Impossibilitati ad usare AJAX");
        }
    }
    
    function execfunc(method,url,bool){
      myReq.onreadystatechange = handleResponse;
      myReq.open(method,url,bool);
      myReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
      myReq.send(stringa);
    }
    
    
    function InviaDati(){
      PreparaDati();
      AJAXReq("POST","sendlike.php",true);
    }
    
    
    function handleResponse(){
      if(myReq.readyState == 4){
        if(myReq.status == 200){
          alert(myReq.responseText);
        }else{
          alert("Niente da fare, AJAX non funziona :(");
        }
      }
    }
    </script>
    Ringrazio anticipatamente.
    ciao

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    E' il form secondo me che ti apre la pagina "sendlike.php". Comunque il fatto che tu abbia messo "return false" mi lascia perplesso rispetto a quanto scritto prima.

    Comunque, prova a rimuovere il form, cambiare il bottone da submit a button e mettere la funzione InviaDati(); sull'evento onclick del bottone.

    Altra possibilità. Usa le funzioni di jQuery per fare il POST sempre senza il form.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    ciao badaze,
    innanzitutto grazie per aver risposto. Ho provato anche rimuovendo il form e inserendo un button ma non funziona. il problema è nella funzione PreparaDati inquanto mi segnala che recupero_id non risulta definito ma non capisco perchè.
    Comunque l'invio dei dati funziona correttamente se imposto
    var form = document.forms[0];
    ma ovviamente facendo cosi modifica sempre e soltanto il valore del primo form che trova.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Comunque una cosa più semplice c'è.

    Fossi in te farei una funzione InviaDati parametrizzata InviaDati(id,id_user,id_photo); abbinata all'evento onclick del "button" add_like.

    Solo per rendere l'idea.

    <input type="input" name="id_user" value="caio">
    <input type="input" name="id_photo" value="pluto.jpg">
    <input id="1000" class="like" type="button" name="add_like" value="pippo" onclick="InviaDati(1000,'caio','pluto.jpg')";>

    Codice PHP:
    function InviaDati(id,id_user,id_photo); {
          
    // Ajax
          
    $.ajax({
                 
    url  'sendlike.php',
                 
    type 'POST',
                 
    data 'id=' id '&id_user=' id_user  '&id_photo=' id_photo
           
    dataType 'text'
               
    }) ;
     } 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Grazie mille badaze,
    cosi funziona correttamente. Solo una piccola precisazione: essendoci il punto e virgola dopo la parentesi tonda non funzionava.
    function InviaDati(id,id_user,id_photo){
    // Ajax
    $.ajax
    ({
    url : 'sendlike.php'
    ,
    type : 'POST'
    ,
    data : 'id=' + id + '&id_user=' + id_user + '&id_photo=' + id_photo
    ,
    dataType :
    'text'
    }) ;
    }
    cioa

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.