2017-01-03 5 views
0

beforeSend関数が送信中のメッセージを表示し、他の関数が送信された後に.done(function (data)というメッセージが送信されたことを示す以下のサンプルフォームがあります。私がやりたいすべてのメッセージを表示するために、メッセージが送信されていない他の機能を使用することです電子メールが送信されなかったときにエラーを表示

var form = $('#main-contact-form'); 
form.submit(function (event) { 
    $.ajax({ 
     type: 'POST', 
     url: '../sendemail.php', 
     data: { 
      Name: name, 
      Subject: $form.find("input[name='subject']").val(), 
      Email: email, 
      message: $form.find("textarea[name=message]").val(), 
     }, 
     beforeSend: function() { 
      // message is sending... 
     }     
    }) //end ajax 
    .done(function (data) { 
     // message sent! 
}); 
});//end contact form 
+0

電子メールを送信する前に(偽)旗を上げてみて、メッセージが正常に送信された場合にフラグを立てて、それぞれのメッセージに対してフラグをチェックします。 – Vaibhav

+0

メールはSMSではありません – csandreas1

答えて

1
  1. あなたは、以下のようにエラーを処理するためのAPIを失敗し使用することができます「というエラーが、メッセージは送信されません」。
  2. また、$ .ajax({constObj})では、同じようにapisを成功とエラーのように扱うことができます。

here for more info

//1. 

$.ajax({ 
      type: 'POST', 
      url: '../sendemail.php', 
      data: { 
       Name: name, 
       Subject: $form.find("input[name='subject']").val(), 
       Email: email, 
       message: $form.find("textarea[name=message]").val(), 
      }, 
      beforeSend: function() { 
      // message is sending... 
      }     
     }) //end ajax 

     .done(function (data) { 
     // message sent! 

     }) 
     .fail(function(){ 
      //handle error here 
     }); 

// 2を参照してください。代わりに.done使用Ajaxのオプションsuccesserror

constObj.success(function(data){ 
}); 

constObj.error(function(error){ 
}); 
+0

私が失敗した機能を追加すると私の全連絡フォームは機能しません。 – csandreas1

+0

実際に私はエラー – csandreas1

+0

を取得しましたが、fail()関数を追加している間にどのようなエラーが発生しましたか?とにかくアプローチ2を使用する方が望ましいです。 –

1

。電子メールの送信に失敗したときにサーバーにエラーを投げます。サーバー側では

$.ajax({ 
    success: function() { 
     // message sent! 
    }, 
    error: function() { 
     // message sent failed! 
    } 
}); 

if ($this->sendMessage()) { 
    echo "ok"; 
} else { 
    throw new Exception('Email failed to send.', 500); 
} 

ユーザーが実際に(私はそれを把握するためにいくつかの複雑な方法があると思います)、電子メールを受信した場合にあなたが言うことができません。

0

SUCCESSFUL ajaxリクエスト(通常はHTTP 200を返す)の後に実行されるdone()を使用します。 http://api.jquery.com/jquery.ajax/を読むと、FAILED ajaxリクエストの後に実行されるfail()があります。

また、sendemail.phpの出力にも依存します。あなたのPHPは、HTTP 200とするとエラー以外を返す場合は、例えば失敗()約束の方法を利用することができます...

$.ajax({ 
    beforeSend: function() { 
     $('msg').text('Sending email...'); 
    } 
}).done(function() { 
    $('#msg').text('Success!'); 
}).fail(function() { 
    $('#msg').text('Failed!'); 
}); 

しかし、あなたのPHPもHTTP 200とするとエラーを返した場合、あなたのような何かを行うことができます次...

PHP:

$response = array(
    'status' => null, 
    'error' => null 
); 

if ($mailer->send()) { 
    $response['status'] = true; 
} else { 
    $response['status'] = false; 
    $response['error'] = 'Unable to send email'; 
} 

のjQuery:

$.ajax({ 
    beforeSend: function() { 
     $('msg').text('Sending email...'); 
    } 
}).done(function(data) { 
    if (data.status === true) { 
     $('#msg').text('Success!'); 
    } else { 
     $('#msg').text('Failed: ' + data.error); 
    } 
}); 
+0

あなたのjqueryコードが間違っていると思う、私はあなたのコードを試してエラーが発生しますが、電子メールが送信されます。そしてbeforeSend関数が永久にロードされています – csandreas1

+0

完全なjQueryコードではありません。done()メソッドとfail()メソッドを使用する方法の例です。 –

関連する問題