web-dev-qa-db-ja.com

AJAX お問い合わせフォームの発行

私はサイドバー用の連絡フォームを作成しました。これはChromeでは完全に機能しますが、IEやFFでは機能しません。

私は何時間もそれをじっと見つめていて、何が悪いのかわからない。

どこにもエラーは出ませんが、FFまたはIEで送信すると、コンソールに「nope」と記録され、#jvmsgに-1のメッセージが表示されます。

私のHTMLは:

<li id="jvcontactwidget-3" class="widget widget_contact">
  <div class="title"><h2>Test</h2></div>
  <form id="jvcontact" name="widget_contact" action="" method="post">
    <label class="required" for="email">Email Address (required)</label>
    <input class="required" type="email" name="email">
    <label class="required" for="firstName">First Name (required)</label>
    <input class="required" type="text" name="firstName">
    <label class="required" for="lastName">Last Name (required)</label>
    <input class="required" type="text" name="lastName">
    <label for="question">Any questions for us?</label>
    <textarea rows="5" name="question"></textarea>
    <input type="submit" value="Send it" style="display: inline-block; ">
</form>
<div class="jvloading" style="display: none; "></div>
<div id="jvsuccess" style="display: none;" >Thanks for the email</div>
<div id="jvmsg" style="display: none; "></div>
</li>

私のjsファイルはこんな感じです:

jQuery(document).ready(function($) {
jQuery('#jvcontact').submit(function() {
    jQuery('.widget_contact input[type="submit"]').hide();
    jQuery('.jvloading').show();
    var str = jQuery(this).serialize();
    jQuery.ajax({
        type: 'POST',
        url: '/wp-admin/admin-ajax.php',
        data: 'action=contact_form&'+str,
        success: function(msg) {
            //jQuery('#jvmsg').ajaxComplete(function(event, request, settings){
                if(msg === 'sent') {
                    console.log('sent');
                    jQuery('#jvmsg').hide();
                    jQuery('.jvloading').slideUp();
                    jQuery('.widget_contact input[type="submit"]').slideUp();
                    jQuery('#jvcontact').slideUp();
                    jQuery('#jvsuccess').fadeIn('slow');
                }
                else {
                    console.log('nope');
                    jQuery('#jvmsg').html(msg);
                    jQuery('.jvloading').hide();
                    jQuery('.widget_contact input[type="submit"]').show();
                    jQuery('#jvmsg').fadeIn('slow');
                }
            //});
        }
    });
    return false;
});

;));

私のphpファイル:

function ajax_contact() {
if(!empty($_POST)) {

  $error = "";

  //Check to make sure sure that a valid email address is submitted
  if(trim($_POST['email']) == '')  {
    $error .= "An email address is required<br/>";
  } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
    $error .= "A valid email address is required<br/>";
  } else {
    $email = trim($_POST['email']);
  }

  //Check to make sure that the first name field is not empty
  if(trim($_POST['firstName']) == '') {
    $error .= "Your first name is required<br/>";
  } else {
    $firstName = trim($_POST['firstName']);
  }

  //Check to make sure that the last name field is not empty
  if(trim($_POST['lastName']) == '') {
    $error .= "Your last name is required<br/>";
  } else {
    $lastName = trim($_POST['lastName']);
  }

  if(trim($_POST['question']) == '') {
    $question = "They had no questions at this time";
  } else {
    $question = $_POST['question'];
  }

  $admin_mail = get_bloginfo('admin_email');


if(empty($error)) {

  $message  = "Someone wants to get in touch with you. \n\n
               Name: " . $firstName . " " . $lastName . "\n
               Email: " . $email . "\n
               Question: " . $question . "\n";

  $jvMail = wp_mail($admin_mail, 'Contact from your website', $message);
  echo "sent";

} else {
  echo $error;
}
die();
}
}

add_action('wp_ajax_contact_form', 'ajax_contact');

助けてくれてありがとう!

1
joshvermaire

すべてのブラウザにログインしていますか以来

add_action('wp_ajax_contact_form', 'ajax_contact');

ログインしているユーザーに対してのみ機能するので、修正するには変更する必要があります。

add_action('wp_ajax_nopriv_contact_form', 'ajax_contact');

自分の機能をユーザーだけでなく訪問者にも機能させたい場合。

3
Bainternet