2011-05-04 125 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才能获得响应。