2012-02-18 16 views
5

Mam stronę profilu aktualizacji. Ma trzy formy, używa żądania pobrania, aby wyświetlić dowolny formularz. Podobnie jak update_profile.php?type=profile pozwala użytkownikowi edytować swój profil, update_profile.php?type=settings pozwala użytkownikowi edytować jego ustawienia konta.Przesyłanie plików przy użyciu jquery bez odświeżania strony

Typ: profil zawiera dane wejściowe do pliku, chcę, aby użytkownicy mogli przesyłać treści bez odświeżania strony. Teraz to nie można zrobić za pomocą ajax, więc będę potrzebować obejścia. Próbowałem metody iframe, metody xhr2 i metody html5 + ajax, które ktoś napisał na stackoverflow.

Więc jeśli ktoś byłby uprzejmy wyjaśniać mi rzeczy w szczegółach, byłbym wdzięczny. Tu jest mój 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> 

Oto kod jQuery normalnie używam do składania formularzy:

$(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); 
      } 
     }); 

    }); 
}); 

używam $ _FILES w php, aby uzyskać nazwę pliku i sprawdzenia jego rozszerzenie i rozmiar po stronie serwera, więc potrzebuję informacji w tym. Jak to zrobić? Czy muszę również zmienić nazwę formularza, aby zaktualizować profil i napisać inny kod niż inne formularze na tej samej stronie?

+0

tła przesyłające użyć apletu flash lub ukrytego iframe aby ukryć przesłanie z pierwszego planu strony. Nie możesz użyć ajaxa do samodzielnego przesłania, ponieważ ajax nie obsługuje plików, tylko standardowe dane/ciągi formularzy. –

+0

To dlatego zapytałem, jak mogę to zrobić za pomocą iframe, po prostu chcę wykonać szczegółowe kroki, ponieważ próbowałem wielu samouczków, a także irc (sugerują, żebym używał wtyczek). Moja ostatnia wolna stacja to stackoverflow T_T –

Odpowiedz

6

Musisz użyć dowolnego skryptu serwera, aby przesłać plik, więc trzeba sposobu Ajax, zapytania j z AJAX, można spróbować także uplaodify

http://www.uploadify.com/

+0

Chciałbym napisać to ja sam, czy mogę to zrobić? Również dlatego nie używam wtyczek, większość z tych wtyczek służy tylko do przesyłania plików, nie wiem jak skonfigurować je do pracy z wejściami tekstowymi. wiem co mam na myśli? –

+0

ok po studiowaniu uploadify, używa skryptu php i $ _FILES do przesłania, co jest wspaniałe: D Ale ma pliki SWF, do czego służą te pliki? czy to jest przesyłający? to po prostu jest do bani, nienawidzę flasha. Nie chcę go używać w mojej witrynie, pod warunkiem, że ma wiele exploitów i innych rzeczy. również używam skryptu php, aby przenieść przesłane pliki do folderu, nie chcę, aby uploadify robił to sam. czy możesz mi pomóc skonfigurować to odpowiednio? –

Powiązane problemy