我不确定问题出在哪里但是我通过ajax传递一个变量,如果我在检查它时传递一个空白就不会被捕获!$ varname
这是我的ajax功能:
var subscribe = function(){
var dataString = $("#subinput").val();
$.ajax ({
url: '<?php echo $path ?>',
type: 'POST',
data: 'email=' + dataString.value,
datatype: 'JSON',
success: function(results){
if(results.err == '1'){
$('.onconfirmation').css('color','#f00');
}else{
$('.onconfirmation').css('color','#5A5A5A');
}
$('.onconfirmation').innerHTML(results.message);
$('.onconfirmation').fadeIn();
//alert(results);
}
});
这是我的PHP:
<?php
$email = $_POST['email'];
if(!$email){
$o['err'] = '1';
$o['message'] = 'Please do not leave this field blank';
}/*elseif(filter_var($email, FILTER_VALIDATE_EMAIL)){
$o['err'] = '1';
$o['message'] = 'Please enter a valid email address';
}else{
$o['err'] = '0';
$o['message'] = 'Thank you for your subscription';
}*/
ob_start();
var_dump($o);
$out = ob_get_clean();
mail('[REDACTED]','debug',$out);
//$o = json_encode($o);
//return ($o);
?>
正如您可以看到它目前处于调试状态,但如果我将空白值传递给此,我收到的电子邮件是NULL
。如果我给自己发送$email
变量而不是$out
变量,我收到的电子邮件是undefined
,但是如果我从if语句中删除!
,则会发送电子邮件给我得到的是:
array(2) {
["err"]=>
string(1) "1"
["message"]=>
string(36) "Please do not leave this field blank"
}
我确信我只是遗漏了一些非常简单的东西,我一直都是,但老实说,我无法想出这个。任何帮助都将受到大力赞赏。欢呼声。
答案 0 :(得分:1)
var subscribe = function(){
var dataString = $("#subinput").val();
$.ajax ({
url: '<?php echo $path ?>',
type: 'POST',
data: { email : dataString },
datatype: 'JSON',
success: function(results){
if(results.err == '1'){
$('.onconfirmation').css('color','#f00');
}else{
$('.onconfirmation').css('color','#5A5A5A');
}
$('.onconfirmation').innerHTML(results.message);
$('.onconfirmation').fadeIn();
//alert(results);
}
});
见
行数据:{email:dataString}
一旦你有了val(),就不应该使用&#34; .value&#34;以这种方式发布数据是添加键和值的正确方法。
在PHP做那些事情..
<?php
$o = array();
if(!isset($_POST['email']) OR empty($_POST['email'])){
$o['err'] = '1';
$o['message'] = 'Please do not leave this field blank';
echo json_encode($o);
exit();
}
$email = $_POST['email'];
.......other code
exit()阻止PHP阅读你文件的下一行,所以如果没有设置或没有设置emial,它就不会再做任何其他任务了。
答案 1 :(得分:1)
替换它:
var subscribe = function(){
var dataString = $("#subinput").val();
$.ajax ({
url: '<?php echo $path ?>',
type: 'POST',
data: 'email=' + dataString.value,
datatype: 'JSON',
success: function(results){
if(results.err == '1'){
$('.onconfirmation').css('color','#f00');
}else{
$('.onconfirmation').css('color','#5A5A5A');
}
$('.onconfirmation').innerHTML(results.message);
$('.onconfirmation').fadeIn();
//alert(results);
}
});
用这个:
var subscribe = function(){
var dataString = $("#subinput").val();
$.ajax ({
url: '<?php echo $path ?>',
type: 'POST',
data: 'email=' + dataString,
datatype: 'JSON',
success: function(results){
if(results.err == '1'){
$('.onconfirmation').css('color','#f00');
}else{
$('.onconfirmation').css('color','#5A5A5A');
}
$('.onconfirmation').innerHTML(results.message);
$('.onconfirmation').fadeIn();
//alert(results);
}
});
val()实际上返回一个元素的值。
答案 2 :(得分:0)
var dataString = $("#subinput").val();
// ...
data: 'email=' + dataString.value,
您使用.val()获取#subinput的值,这是一个字符串。然后,您试图读取该字符串的“值”属性,该属性不存在。当您将未定义的值与“email =”连接时,JavaScript会将其转换为字符串“undefined”。
要解决此问题,您只需将dataString.value
更改为dataString
即可。但是,为了那些在他们的PHP代码将其解释为空格的电子邮件地址(especially Gmail users)中使用+
符号的人,您可能应该将整行更改为:< / p>
data: {email: dataString},
将带有名称 - 值对的JavaScript对象传递给jQuery允许它正确查询字符串转义+
。