这个想法是这个脚本将我的html表单中输入的文本的值POST到emailform.php
,后者获取该数据并将其添加到.txt
文件中。我认为我遇到的麻烦是将PHP中$email
的值设置为html文本输入的值。因此,当前脚本被触发时,我会收到两个警报(首先是“错误”,然后是“完成”,来自.fail和.complete函数),然后页面重新加载。这就是为什么我认为问题在于从PHP返回的信息,但也许我错了。
<form method="post">
<input type="text" name="email" value="" class="emailSubmitSidebar" placeholder=" Your Email">
<input type="submit" name="submit" value="Add" class="submitButton" id="subscribeButton">
</form>
<script type='text/javascript'>
$(document).ready(function() {
var subscribeButton = $('#subscribeButton');
subscribeButton.click(function() {
$.ajax({
url: 'emailform.php',
type: 'POST',
dataType: 'text',
data: {email: $("input[name=email]").val()},
})
.done(function(data) {
alert("Added!");
})
.fail(function() {
alert("error");
})
.always(function() {
alert("complete");
})
})
})
</script>
以下是PHP,我添加了前两行来检查是否有任何错误,其中没有错误。奇怪的是,当我单独运行PHP时,echo
行打印页面上的数字3,没有任何明显的原因。我对变量$email
进行了注释,因为我认为首先检查isset
是否更好/必要。
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$fileHandle = fopen('emailList.txt', 'a') OR die ("Can't open file\n");
$email= isset($_POST['email']) ? $_POST['email'] : "";
// $email=$_POST['email'];
$result = fwrite ($fileHandle, "$email; \n");
fclose($fileHandle);
echo (!$result) ? "error" : $result;
die;
?>
答案 0 :(得分:0)
我认为您的数据存在问题,请尝试将其序列化为json数据数组:
var data = $(form).serialize();
$.ajax({
url: 'emailform.php',
type: 'POST',
dataType: 'text',
data: data,
})
这些值将作为普通的帖子请求发送,因此电子邮件地址将位于$_POST['email']
;
从此处更新
jquery .done()和.fail()函数需要http状态代码才能工作,所以你的php文件应该返回这些代码。当请求成功并且成功时,200范围内的任何内容都可以。出错时,应返回400或500范围内的某些内容。这里有完整列表:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
因此,当返回2xx时触发ajax .success函数(用.success替换.done),并在返回状态代码4xx或5xx时调用.error。请参阅下面的php如何实现这一点。
你得到的数字3是fwrite函数的$ return值,根据:http://nl3.php.net/fwrite
fwrite()返回写入的字节数,或者出错时返回FALSE。
让你的php像这样:
<?php
//ini_set('display_errors', 'On');
//error_reporting(E_ALL);
if($fileHandle = fopen('emailList.txt', 'a')) {
if(isset($_POST['email']) && !empty($_POST['email'])) {
$email = $_POST['email'];
$result = fwrite ($fileHandle, "$email; \n");
fclose($fileHandle);
if(isset($result) && !empty($result)) { // Something was written
http_response_code(200);
echo "File written";
} else { // Writing failed
http_response_code(500);
echo "Writing of file failed";
}
} else { // Empty email
http_response_code(500);
echo "Email was empty";
}
} else { // File could not be opened
http_response_code(500);
echo "File could not be opened for writing";
}
?>
答案 1 :(得分:0)
(简单)
将HTML更改为:
<input type="text" name="email" value="" class="emailSubmitSidebar" placeholder=" Your Email">
将JS更改为:
$.ajax({
url: 'emailform.php',
type: 'POST',
dataType: 'text',
data: {email: $("input[name=email]").val()}
})
.done(function(data) {
// there checking
alert("success!")
})
将PHP更改为:
$fileHandle = fopen('emailList.txt', 'a') OR die ("Can't open file\n");
$email=$_POST["email"];
$result = fwrite ($fileHandle, "$email; <br/>");
fclose($fileHandle);
echo (!$result)? "error" : $result;
die;