0

問題がどこにあるのかはよくわかりませんが、変数を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取得する電子メールはですが、ifステートメントからundefinedifを削除すると、取得する電子メールは次のようになります。!

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

非常に単純なものが欠けていると確信しています。私はいつもそうですが、正直なところ、これを理解することはできません。どんな助けでも大歓迎です。乾杯。

4

3 に答える 3

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

ラインを見る

データ: {メール: データ文字列}

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

exit() は、PHP がファイルの次の行を読み取るのを停止するため、IF emial が設定されていないか空の場合、それ以上のタスクは実行されません。

于 2013-01-04T10:46:20.927 に答える
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() は実際には要素の値を返します。

于 2013-01-04T10:58:00.053 に答える
0
var dataString = $("#subinput").val();
// ...
data: 'email=' + dataString.value,

.val()を使用して、文字列である #subinput の値を取得しました。次に、存在しないその文字列の「値」プロパティを読み取ろうとしました。undefined 値を "email=" と連結すると、JavaScript はそれを文字列 "undefined" に変換します。

これを修正するには、に変更dataString.valueするだけdataStringです。ただし、+電子メール アドレスで記号を使用しているユーザー (特に Gmail ユーザー) のために、PHP コードがスペースとして解釈するため、おそらく行全体を次のように変更する必要があります。

data: {email: dataString},

名前と値のペアを持つ JavaScript オブジェクトを jQuery に渡すと、適切にクエリ文字列をエスケープすることができます+

于 2013-01-04T11:12:03.500 に答える