Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/05/2010, 17:18
Avatar de MaRcElTeLlA
MaRcElTeLlA
 
Fecha de Ingreso: mayo-2010
Ubicación: Martorell
Mensajes: 66
Antigüedad: 14 años, 7 meses
Puntos: 5
Problema en notebook ajax

Hola Gente! Tengo un problema con el Ajax.

El problema es el siguiente. Yo tengo que mandar un formulario a la base de datos, que almacena un asunto y un mensaje.

El objetivo es crear un blog.

Quiero que el usuario pueda dejar una nota,y entonces la nota valla a la db. Pero también quiero que pueda borrarla.

A su vez, quiero que no sobrepase los 10 mensajes una sola persona.
Y también, que no se cometan redundancias como escribir dos veces un mensaje con el mismo asunto(simplificacion de escribir 2 mensajes iguales).

Bueno, os pego los códigos por aqui.

Los scripts funcionan bien pero tienen cosas extrañas:

Lo que sospecho es que cuando pulsas en enviar, ajax envia, pero si rápidamente vuelves a pulsar, vuelve a hacer una segunda peticion, y se me cuela un mensaje javascript con el mismo asunto y mensaje, pero en la db no.

Alguna idea para que no pase eso?

Gracias.




Código de INDEX.PHP


Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
  <title>Blog</title>
  <meta name="GENERATOR" content="Quanta Plus">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="stylesheet" type="text/css" href="blogstyle.css"/>



  <script language="javascript" type="text/javascript">
  // <!--
  

MENSAJESPERMITIDOS = 10;


/*El blog tiene varias cosas.

1.Función que crea un nuevo div con el contenido, ademàs de (meterlo en la db).

2.Función que carga todos los comentarios anteriores de la db.

*/

accion='accion';

function AJAX(){

if(window.XMLHttpRequest){
peticion_http = XMLHttpRequest();
}
else if(window.ActiveXObject){
peticion_http = new ActiveXObject("Microsoft.XMLHTTP");
}




//Realizo la petición http

peticion_http.open('GET','procesablog.php?contenido='+contenido+'&asunto='+asunto+'&accion='+accion,true);

peticion_http.send(null);


	peticion_http.onreadystatechange = function(){	if(peticion_http.readyState==4){ respuesta=peticion_http.responseText;}}
	
	return respuesta;
}









//Display
function CreaDiv(DivRoot,asunto,contenido){
//identifico el nodo raiz
DivRoot = document.getElementById(DivRoot);
//Creo los elementos hijos de la raiz
Div = document.createElement("div");
Div.setAttribute("id","post");


Asunto = document.createElement("h3");

/*CRUZ PARA CERRAR**************/

Cruz = document.createTextNode("Cerrar");
Cerrar = document.createElement("a");
Cerrar.appendChild(Cruz);
Div.appendChild(Cerrar);
Cerrar.setAttribute("onclick","accion='borrar';borracomentario(this.parentNode);");



//Asignando un id a la cruz.
Cerrar.setAttribute("id","cerrar");

/**********************************************/





//Creo los elementos nietos de la raiz
Texto = document.createTextNode(contenido);
AsuntoTexto = document.createTextNode(asunto);

//Enlazo nieto e hijo, hijo y padre.
Asunto.appendChild(AsuntoTexto);
Div.appendChild(Asunto);

//Enlazo hijo y padre
Div.appendChild(Texto);


//uno el padre con la raíz
DivRoot.appendChild(Div);



}





//Procesando la informacion

function Procesa(){

DivRoot = "blogdisplay";
//Saco el input
asunto= document.getElementById("blogasunto").value;
//Saco el textarea
contenido = document.getElementById("blogmensaje").value;


//Miro cuantos div hay, y si hay que añadir más o no.
if(document.getElementById(DivRoot).childNodes.length<=MENSAJESPERMITIDOS){



//La función procesa también llamarà a AJAX.

		respuesta = AJAX();//calcula una respuesta entre otras cosas.

		
				if( respuesta == 1){
				//Creo Div
				CreaDiv(DivRoot,asunto,contenido);
				}
				else alert(respuesta);
	
}

}


function borracomentario (div){

//conseguir el asunto bueno.
asunto=div.childNodes[1].firstChild.nodeValue;


div.parentNode.removeChild(div);
//Esta función hará mas cosas cuando haya que borrar el comentario de la db.

AJAX();

}











  // -->
  </script>
</head>
<body>
<h1>::El blog del Espía::</h1><br>

<div id="blog" >

	<label>Asunto</label><br><input type="text" size="26" id="blogasunto" /><br>
	<textarea rows="10" cols="30" id="blogmensaje" ></textarea><br>
	<a onclick="accion='insertar';Procesa();" id="button" >Anotar</a>


</div>
<div id="blogdisplay"></div>








</body>
</html>
y ahora el archivo que uso para procesar este blog. PROCESABLOG.PHP

Código:

<?php 






#Globales
include_once("/home/zeuslife/public_html/inc/globals.php");
#Función Query
include_once("/home/zeuslife/public_html/inc/query_i.php");
/*
#Funciones
include_once("/home/zeuslife/public_html/inc/functions.php");
#Funciones
include_once("/home/zeuslife/public_html/inc/security.php");

$user = $_SESSION['UTSW'];
$userid = $_SESSION['IDTSW'];
*/
//Cambio las variables que vienen, por las buenas.
$userid = 48;
$mensaje = $_GET['contenido'];
$asunto = $_GET['asunto'];
$accion = $_GET['accion'];


//El ajax se ha enviado por post, por tanto, tengo las variables: $userid, $asunto, $mensaje y $accion



//Pongo el userid mio, para hacer las pruevas.



$ultimolog = date("Y")."-".date("m")."-".date("d")." ".date("h").":".date("i").":".date("s");


if ($accion == "insertar"){


//Condición para insertar.
	$que = db_query("SELECT * FROM spy_notebook WHERE userid='$userid' AND asunto='$asunto'");
	$cuantas = mysql_num_rows($que);	
	
	if($cuantas==0){
	$query = db_query("INSERT INTO spy_notebook (userid,ultimoedit,nota,asunto) VALUES('$userid','$ultimolog','$mensaje','$asunto')");
	echo 1;
	}
	else  {
	echo 0;
	}
}

else if ($accion == "borrar"){

$query = db_query("DELETE FROM spy_notebook WHERE userid = '$userid' AND asunto='$asunto'");

echo 1;

}




?>

Supongo que la historia estaria en frenar el javascript, que se esperara a que la petición acabara, pero no se me ocurre como.

Otro problema que tiene, es que misteriosamente, la primera vez que quiero pulsar el boton ANOTAR, no anota, y no se bien bien porqué, y ahi si que no tengo ni sospechas ni nada, no tengo ni idea de porqué.


Muchas grácias, y saludos!!