2012-02-18 21 views
5

Tengo una página de perfil de actualización. Tiene tres formas, utiliza una solicitud de obtención para mostrar cualquier formulario. Como update_profile.php?type=profile le permite al usuario editar su perfil, update_profile.php?type=settings le permite al usuario editar la configuración de su cuenta.Carga de archivos usando jquery sin actualización de página

Tipo: perfil tiene una entrada de archivo, quiero que los usuarios puedan cargar sin actualizar la página. Ahora esto no se puede hacer usando ajax, entonces necesitaré una solución. Probé el método iframe, el método xhr2 y el método html5 + ajax que alguien publicó en stackoverflow.

Así que si alguien sería amable para explicarme las cosas en pasos detallados, lo agradecería. Aquí es mi html:

<script type='text/javascript'>  
function nouser() { 
     $().toastmessage('showToast', { 
      text  : 'The user does not exist', 
      sticky : true, 
      position : 'middle-center', 
      type  : 'error', 
      closeText: '', 
      close : function() { 
       console.log("toast is closed ..."); 
      } 
     }); 

    } 
</script>  

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<title>Update Profile</title> 
<link rel="shortcut icon" type="image/png" href="includes/template/images/favicon.png" /> 

<link rel="stylesheet" type="text/css" href="includes/template/css2/style.css" /> 
<link rel="stylesheet" type="text/css" href="includes/jquery/toast/resources/css/jquery.toastmessage.css" /> 
<link rel="stylesheet" type="text/css" href="includes/jquery/notification/css/jquery_notification.css" /> 


<script type="text/javascript" src="includes/jquery/jquery_v_1.4.js"></script> 

<script type="text/javascript" src="includes/jquery/toast/javascript/jquery.toastmessage.js"></script> 
<script type="text/javascript" src="includes/jquery/notification/js/jquery_notification_v.1.js"></script> 
<script type="text/javascript" src="includes/jquery/auto_resize/resize.js"></script> 
<script type="text/javascript" src="includes/jquery/jquery_form.js"></script> 
<!--[if IE]> 
<link rel="stylesheet" type="text/css" href="css2/ie.css" /> 
<![endif]--> 
</head> 
<body> 
<div class="topBar" > 
<marquee>Welcome to The Marshall Meme. Your IP Adress is 127.0.0.1 You are logged in as marshall</marquee> 
</div> 
<br /> 
<div class="logo" > 

<a href="http://www.themarshallmeme.com"><img src="includes/template/images/logo.png"/></a><br/> 
</div> 
<center> 
<div id="wrap"> 
<br> 
<div class="wrapbg"> 
<span class="corners-top"><span></span></span> 
<a class='nav' href='index.php'>Home</a> 
<a class='nav' href='whoson.php'>Whos online</a> 
<a class='nav' href='logout.php'>Logout</a> <a class='nav' href='forum.php'>Forum</a> 
<span class="corners-bottom"><span></span></span> 

</div><div class="wrapbg"> 
<span class="corners-top"><span></span></span> 
<div id="content"> 
Web name 
<hr class="hr1" /> 
<br /> 
<ul> 
<a href='whats_new.php'><button class='action greenbtn'><span class='label'>Whats new?</span></button></a><a href='friend_requests.php'><button class='action redbtn'><span class='label'>Friend requests</span></button></a><a href='update_profile.php?type=profile'><button class='action greenbtn'><span class='label'>Edit profile</span></button></a><a href='update_profile.php?type=settings'><button class='action bluebtn'><span class='label'>Security Settings</span></button></a><a href='update_profile.php?type=changepass'><button class='action greenbtn'><span class='label'>Change password</span></button></a></div> 
<span class="corners-bottom"><span></span></span> 
</div><div id='emptydiv'> </div> 

<div class="wrapbg"> 

<span class="corners-top"><span></span></span> 
<div id="content"><br/> 
Update profile 
<hr class='hr1'> 
<form action='' method="POST" enctype="multipart/form-data"> 
<table> 


Profile picture<br> 
<img src="uploads/profile_pics/TIFF_06_liam-neeson_01.jpg"></img> 
Thumbnail 
<img src="uploads/profile_pics_small/TIFF_06_liam-neeson_01.jpg" ?></img> 
<tr><td class="lTxt">Change profile picture:</td> <td><input type="file" name="pic"/></td></tr> 
<tr><td class="lTxt">About me:</td> <td><textarea name='about'>Updating my profile :| 
fuck yeaaaa</textarea></td></tr> 

<tr><td class="lTxt">Interests:</td> <td><textarea name='interests'>I love web development with jquery and php. 
Really awesome! yea</textarea></td></tr> 
<input type='hidden' name='action' value='profile'/> 
<tr><td></td><td><button id="update_profile" name='update' class="action greenbtn"><span class="label">Update profile</span></button></td></tr> 
</table> 
</form> 
</a></div> 
<span class="corners-bottom"><span></span></span> 
</div>  <script type='text/javascript'>  

$(function(){ 
    $('form[name=update_stuff]').on("submit", function(e){ 
     e.preventDefault(); 

     $.ajax({ 
      url: 'process.php', 
      type: 'POST', 
      data: $(this).serialize(), 
      success: function(data){ 
       $('#emptydiv').html(data); 
      } 
     }); 

    }); 
}); 


    </script> 
</div> 
</br> 
<div id="footer"> 

Copyright &copy; 2010-2011, <a href="http://www.themarshallmeme.com">Marshall Meme</a>. All rights reserved.<br> 

There are no users online</div> 
</div> 
</center> 
</body> 
</html> 

Este es el código jQuery normalmente utilizo para enviar formularios:

$(function(){ 
    $('form[name=update_stuff]').on("submit", function(e){ 
     e.preventDefault(); 

     $.ajax({ 
      url: 'process.php', 
      type: 'POST', 
      data: $(this).serialize(), 
      success: function(data){ 
       $('#emptydiv').html(data); 
      } 
     }); 

    }); 
}); 

utilizo el $ _FILES en PHP para obtener el nombre del archivo y verificar su extensión y tamaño lado del servidor, entonces necesito la información en eso. ¿Cómo puede hacerse esto? ¿También necesitaría cambiar el nombre del formulario para actualizar el perfil y escribir un código diferente para él que los otros formularios en la misma página?

+0

cargadores fondo utilizan un applet de flash o un iframe oculto para ocultar la carga desde el primer plano de una página. No puede usar ajax para hacer una carga por sí mismo, ya que ajax no admite archivos, solo cadenas/datos de formularios estándar. –

+0

Es por eso que pregunté cómo puedo hacerlo usando iframes, solo quiero pasos detallados para hacerlo porque he intentado muchos tutoriales y también irc (me sugieren que use complementos) Mi último recurso es stackoverflow T_T –

Respuesta

6

Usted debe tener que utilizar cualquier secuencia de comandos del servidor para subir archivos, por lo que tiene que método Ajax, consulta j con el Ajax, puede intentar también uplaodify

http://www.uploadify.com/

+0

me gustaría escribir esto mismo, ¿de todos modos puedo hacer esto? También, por qué no uso plugins, la mayoría de estos complementos son solo para subir archivos, no sé cómo configurarlos para que funcionen también con entradas de texto. ¿sabes lo que quiero decir? –

+0

bien después de estudiar uploadify, usa una secuencia de comandos php y $ _FILES para cargar, que es genial: D Pero tiene archivos swf, ¿para qué sirven estos archivos? ¿es el cargador? eso solo apesta, odio flash. No quiero usarlo en mi sitio web siempre que tenga muchos exploits y esas cosas. también utilizo el script php para mover los archivos cargados a una carpeta, no quiero que uploadify haga esto por sí mismo. ¿Me pueden ayudar a configurarlo en consecuencia? –

Cuestiones relacionadas