2013-01-04 2 views
0

Я не совсем уверен, где проблема, но я передаю переменную через AJAX и не быть пойманным, если я прохожу пустым, когда я проверяю его! $ VarNameнеопределенная переменная пропусканием не проверить

Вот моя Аякса функция:

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); 
?> 

Как вы можете видеть, что она находится в состоянии отладки в данный момент, но если я прохожу пустое значение через в этом, письмо, которое я получаю g - NULL. Если я по электронной почте себе в $email переменных вместо переменной $out, электронная почта я получаю undefined, но если я удалю ! от если заявления, электронная почта я получаю:

array(2) { 
    ["err"]=> 
    string(1) "1" 
    ["message"]=> 
    string(36) "Please do not leave this field blank" 
} 

Я уверен, что я просто пропуская что-то ужасно простое, я всегда, но я честно не могу понять этого. Любая помощь будет широко оценена. Приветствия.

ответ

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); 
    } 
}); 

увидеть линию

данных: {адрес электронной почты: dataString}

После того, как у вас есть Val() вы не должны использовать ".value" и когда POST-ки данные таким образом - правильный способ добавления ключей и значений.

В 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 

выхода() останавливает PHP от чтения следующих строк в файле, так что если emial не установлен или опорожнить это обыкновение делать какие-либо дополнительные задачи.

+0

Cheers.Как я уже сказал в ответ выше, я знал, что это будет какой-то глупый код кода, который я оставил, я просто не мог его увидеть. Спасибо за более чистое предложение PHP. – Richie

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() фактически возвращает значение элемента.

+0

Я знал, что это будет какая-то глупая ошибка пользователя. Я просто не мог ее увидеть. Спасибо. – Richie

0
var dataString = $("#subinput").val(); 
// ... 
data: 'email=' + dataString.value, 

Вы использовали .val(), чтобы получить значение #subinput, который является строкой. Затем вы попытались прочитать свойство «value» этой строки, которое не существует. Когда вы объединяете неопределенное значение с помощью «email =», JavaScript преобразует его в строку «undefined».

Чтобы исправить это, вы можете просто изменить dataString.value на dataString. Однако, ради тех, кто использует + символ в их адреса электронной почты (especially Gmail users), что ваш PHP код будет интерпретировать как пространство, вы, вероятно, следует изменить всю линию:

data: {email: dataString}, 

пропусканием Объект JavaScript с парами имя-значение в jQuery позволяет ему корректно запрашивать строку escape +.

Смежные вопросы