未定义的变量通过不检查

时间:2013-01-04 10:42:30

标签: php ajax

我不确定问题出在哪里但是我通过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"
} 

我确信我只是遗漏了一些非常简单的东西,我一直都是,但老实说,我无法想出这个。任何帮助都将受到大力赞赏。欢呼声。

3 个答案:

答案 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允许它正确查询字符串转义+