正如 tittle 所说,表单值不会发送回服务器。ajax 调用没问题。如何发布输入值?我做错了什么?我正在使用一个简单的函数通过 PHP 处理下一页上的值,所以我的问题一定在这个脚本中。
$(document).ready(function() {
var email_state = false;
$('#form').on('submit', function (e) {
e.preventDefault();
var email = $('#email').val();
email = email.replace(/.(?![^@]+$)/g, '');
if (email == '') {
email_state = false;
return;
}
$.ajax({
url: 'https://test.com/login.php',
type: 'post',
data: {
'email_check' : 1,
'email' : email,
},
success: function(response){
if (response == 'not_taken' ) {
email_state = false;
$('#loginerror').addClass('alert').text('There was an error');
}else if (response == 'taken') {
email_state = true;
$('#form')[0].submit();
}
}
});
});
});
我的PHP代码如下:
$file = fopen("questions.txt","a");
if(isset($_POST['btnsubmit'])){
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
你没有发布$_POST['btnsubmit']
所以 if 语句永远不会触发。我只会做
$file = fopen("questions.txt","a");
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
如果你真的想保留$_POST['btnsubmit'],然后将其添加到jquery和question中,你错过了。
var question = $('#question').val();
email_check : 1,
email : email,
question: question,
btnsubmit : 1
然后在 PHP 中
$file = fopen("questions.txt","a");
if($_POST['btnsubmit'] == 1){
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
}
您正在检查尚未发布的"btnsubmit",这就是为什么 if 条件中的内容未执行的原因。您还需要为"问题"提供数据。使用以下代码:
$file = fopen("questions.txt","a");
if(isset($_POST['email']) && isset($_POST['question'])){
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
}
在 ajax 调用中:
data: {
'email_check' : 1,
'email' : email,
'question': '{your value here}',
},
问题是表单中的变量未设置。这就是为什么当您删除preventDefault
(从您的评论If i remove the prevent default and $('#form')[0].submit(); the form get's submitted correctly
(时它会起作用的原因
拿走e.preventDefault()
,或手动提供参数。
data: {
'email_check' : 1,
'email' : email,
'question' : '{question here take away brackets}',
'btnsubmit' : 1,
},
PHP 代码的问题在于 if 语句没有命中,因为未设置值。您需要在 ajax 调用的数据对象中设置它,或删除 preventDefault,它将自动从表单中 POST 变量。
另外,不确定你是否只是没有发布其余的代码,但除非你echo
一些东西,否则成功函数永远不会被击中,通过:
echo json_encode($ret)