通过jQuery向/从PHP发送/接收数据

时间:2011-05-04 15:16:20

标签: php javascript jquery forms

我正在使用this code让用户输入名称来创建文件夹。我修改了代码以尝试通过jQuery发送表单数据,并通过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}.";
    }
}
?>

3 个答案:

答案 0 :(得分:1)

ajax请求有一个默默失败的坏习惯。  您应该使用jQuery post并利用.success(),. complete()和.error()函数来跟踪您的代码。  还可以使用console.log()来检查参数是否是corectly发送的。我会自己尝试代码来查看问题。

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

答案 1 :(得分:1)

由于$ .ajax请求的性质,不会发送$ _POST ['btn_album']。所以你的php文件到了

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

并返回false。

您还需要回显$ error以获得回复。

答案 2 :(得分: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请求期间,因此php变量$ success和$ error将始终未定义。您必须将这些响应消息作为对实际请求的响应返回,然后使用javascript来显示它们。