我想在用户email
单击订阅按钮时将其保存到数据库。但是,当我输入电子邮件并单击“订阅”按钮时,它将传递一个空数组!
订阅表单代码:
<form id="cx-subscribe-user">
<input type="text" name="email" id="email" placeholder="Enter Your Email" />
<button type="submit" id="subscribe-button">Subscribe</button>
</form>
Js代码:
$('#cx-subscribe-user').on('click', function (e) {
e.preventDefault();
var email = $('#email').val();
$.ajax({
type: "GET",
url: "subscribe-the-user.php",
processData: false,
dataType: 'json',
data: {email: email},
success: function(data) {
console.log('saved scucess');
}
});
});
在subscribe-the-user.php
文件中,我正在尝试var_dump请求,但它正在打印空数组:
var_dump($_GET);exit;
在 var_dump 中,我收到了这个空数组
array(0) {}
答案 0 :(得分:5)
删除processData
,如文档所述,它将使您的请求混乱
processData(默认值:true)
类型:布尔
默认情况下,数据传入 数据选项作为对象(从技术上讲,除 字符串)将被处理并转换为适合的查询字符串 设置为默认的内容类型“ application / x-www-form-urlencoded”。如果 您要发送DOMDocument或其他未处理的数据,请设置此 选项为false。 https://api.jquery.com/jQuery.ajax/
答案 1 :(得分:2)
问题是您正在onclick()
对象上使用<form>
事件,因此,一旦您在电子邮件输入字段中单击以添加一些数据,就会触发表单onclick()
事件并如果提交空白的email
参数给PHP,则email
字段中没有任何数据的情况下将发生ajax请求。
将表单onclick()
更改为按钮click()
或表单submit()
$('#subscribe-button').on('click', function (e) {
还 删除processData: false,
[基于文档:-jQuery ajax documentation]
processData(默认值:true)类型:布尔值默认情况下,数据传入 数据选项作为对象(从技术上讲,除 字符串)将被处理并转换为适合的查询字符串 设置为默认的内容类型“ application / x-www-form-urlencoded”。 如果 您要发送DOMDocument或其他未处理的数据,请设置此 选项为false。
答案 2 :(得分:1)
您可以使用POST
方法
$('#cx-subscribe-user').on('click', function (e) {
e.preventDefault();
var email = $('#email').val();
$.ajax({
type: "POST",
processData: false,
dataType: 'json',
data: {email: email},
url: "subscribe-the-user.php",
success: function(data) {
console.log('saved success');
}
});
});
答案 3 :(得分:1)
电子邮件在发送请求之前需要一些编码
$.ajax({
url: "ajax.php",
type:'get',
data: { email: encodeURIComponent(email)},
dataType: 'json',
success: function(response) {
//Do Something
},
error: function(xhr) {
//Do Something to handle error
}
});