通过jQuery向/从PHP发送/接收数据
问题描述:
我使用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}.";
}
}
?>
答
至少有两个不同的问题与您的代码:
在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来显示它们。
答
Ajax请求有默默失败的坏习惯。 您应该使用jQuery post并利用.success(),.complete()和.error()函数来跟踪您的代码。 也可以使用console.log()来检查参数是否发送正确。我会亲自尝试一下代码以查看问题。
答
由于$就请求的性质,$ _POST [ 'btn_album']不被发送。所以你的php文件得到这里
if (isset($_POST['btn_album'])) {
并返回false。
您还需要echo $ error才能获得响应。
感谢您的输入!我纠正了第一个问题,现在它创建了文件夹,但没有显示成功/错误消息......这引发了第二个问题。我如何通过jQuery显示来自PHP文件的成功/错误消息? – input 2011-05-04 15:40:12
在您最后一个大括号之前echo $ error,您将在ajax请求中传递给您的“成功”。然后你可以写出$('#message).html(成功) – 2011-05-04 15:49:53
优秀,非常感谢你的帮助! – input 2011-05-04 15:58:39