Отправлять / получать данные через jQuery в / из PHP - PullRequest
0 голосов
/ 04 мая 2011

Я использую этот код , чтобы пользователь ввел имя для создания папки. Я изменил код, чтобы попытаться отправить данные формы через jQuery и получить сообщение об успехе / неудаче от PHP через jQuery.

Однако, когда я ввожу имя папки, ничего не происходит. Папка не создается и не отображается никаких ошибок. 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 ]

1 голос
/ 04 мая 2011

Из-за особенностей запроса $ .ajax, $ _POST ['btn_album'] не отправляется.Таким образом, ваш php файл получает здесь

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

и возвращает false.

также вам нужно повторить $ error, чтобы получить ответ.

1 голос
/ 04 мая 2011

Есть как минимум две отдельные проблемы с вашим кодом:

В 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 для их отображения.

1 голос
/ 04 мая 2011

Аякс-запрос имеет плохую привычку молчаливого сбоя. Вы должны использовать jQuery post и воспользоваться функциями .success (), .complete () и .error () для отслеживания вашего кода. Также используйте console.log () для проверки правильности отправки параметров. Я сам попробую код, чтобы увидеть проблему.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...