2011-05-04 37 views
0

我使用this code來使用戶輸入一個名稱來創建一個文件夾。我修改了代碼,嘗試通過jQuery發送表單數據,並通過jQuery從PHP接收成功/失敗消息。通過jQuery向/從PHP發送/接收數據

但是,當我輸入文件夾的名稱時,什麼也沒有發生。沒有創建文件夾,也沒有顯示任何錯誤。 Firebug也不會顯示任何錯誤。

這是我的代碼至今:

create.php:

<html> 
<head><title>Make Directory</title></head> 
<body> 
<div id="albumform"> 
    <form id="album_form" method="post" action="createAlbum.php" enctype="multipart/form-data"> 
     <p id="message" style="display:none;"> 
     <?php echo (isset($success)?"<h3>$success</h3>":""); ?> 
     <?php echo (isset($error)?'<span style="color:red;">' . $error . '</span>':''); ?> 
     </p> 
     <input type="text" id="create_album" name="create_album" value="" /> 
     <input type="button" onclick="return checkForm('album_form');" id="btn_album" name="btn_album" value="Create" /> 
    </form> 
</div> 
</body> 
</html> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    /* $("#btn_album").click(function() { */ 
       function checkForm(form) { 
        //create post data 
         var postData = { 
         "create_album" : $("#create_album").val() 
         }; 

         //make the call 
         $.ajax({ 
         type: "POST", 
         url: "createAlbum.php", 
         data: postData, //send it along with your call 
         success: function(response){ 
          $('#message').fadeIn(); 
         } 
         }); 
       /* }); */ 
       } 
    </script> 

createAlbum.php:

<?php 
/********************** 
File: createDir.php 
Author: Frost 
Website: http://www.slunked.com 
***********************/ 

// set our absolute path to the directories will be created in: 
$path = $_SERVER['DOCUMENT_ROOT'] . '/web/photos/images/'; 


if (isset($_POST['btn_album'])) { 
    // Grab our form Data 
    $dirName = isset($_POST['create_album'])?$_POST['create_album']:false; 

    // first validate the value: 
    if ($dirName !== false && preg_match('~([^A-Z0-9]+)~i', $dirName, $matches) === 0) { 
     // We have a valid directory: 
     if (!is_dir($path . $dirName)) { 
      // We are good to create this directory: 
      if (mkdir($path . $dirName, 0775)) { 
       $success = "Your directory has been created succesfully!<br /><br />"; 
      }else { 
       $error = "Unable to create dir {$dirName}."; 
      } 
     }else { 
      $error = "Directory {$dirName} already exists."; 
     } 
    }else { 
     // Invalid data, htmlenttie them incase < > were used. 
     $dirName = htmlentities($dirName); 
     $error = "You have invalid values in {$dirName}."; 
    } 
} 
?> 

回答

1

至少有兩個不同的問題與您的代碼:

在php文件,你是否$_POST['btn_album']設置。此字段未發送,因爲它不是您的ajax請求的一部分(您只發送"create_album" : $("#create_album").val())。所以創建該文件夾的代碼永遠不會執行。

的另一個問題是在響應消息中的一部分

<?php echo (isset($success)?"<h3>$success</h3>":""); ?> 
    <?php echo (isset($error)?'<span style="color:red;">' . $error . '</span>':''); ?> 

。這個代碼是在頁面加載時計算的,而不是在你的ajax-request期間計算的,所以php-variables $ success和$ error總是未定義的。您必須將這些響應消息作爲對實際請求的響應返回,然後使用javascript來顯示它們。

+0

感謝您的輸入!我糾正了第一個問題,現在它創建了文件夾,但沒有顯示成功/錯誤消息......這引發了第二個問題。我如何通過jQuery顯示來自PHP文件的成功/錯誤消息? – input 2011-05-04 15:40:12

+1

在您最後一個大括號之前echo $ error,您將在ajax請求中傳遞給您的「成功」。然後你可以寫出$('#message).html(成功) – 2011-05-04 15:49:53

+0

優秀,非常感謝你的幫助! – input 2011-05-04 15:58:39

1

Ajax請求有默默失敗的壞習慣。 您應該使用jQuery post並利用.success(),.complete()和.error()函數來跟蹤您的代碼。 也可以使用console.log()來檢查參數是否發送正確。我會親自嘗試一下代碼以查看問題。

http://api.jquery.com/jQuery.post/

1

由於$就請求的性質,$ _POST [ 'btn_album']不被髮送。所以你的php文件得到這裏

if (isset($_POST['btn_album'])) { 

並返回false。

您還需要echo $ error才能獲得響應。