Ajax сообщение не публикует адрес электронной почты? - PullRequest
1 голос
/ 17 июня 2011

ОБНОВЛЕНИЕ: Это не будет работать в Firefox, но будет работать на любом другом браузере.Я даже пытался загрузить Firefox в безопасном режиме (отключив все плагины и т. Д.), Но все еще не работал.: (

Я пытаюсь сделать запись AJAX (при отправке формы) в отдельный файл PHP, который прекрасно работает, не пытаясь отправить адрес электронной почты через сообщение. Я довольно новичок в AJAX идовольно хорошо знаком с PHP. Вот моя форма и вызов ajax

<form class="form" method="POST" name="settingsNotificationsForm">
                        <div class="clearfix">
                            <label>Email <em>*</em><small>A valid email address</small></label><input type="email" required="required" name="email" id="email" />
                        </div>
                        <div class="clearfix">
                            <label>Email Notification<small>...when a new subscriber joins</small></label><input type="checkbox" name="subscribe_notifications" id="subscribe_notifications"> Receive an email notification with phone number when someone  new subscribes to 'BIZDEMO'
                        </div>
                        <div class="clearfix">
                            <label>Email Notification<small>...when a subscriber cancels</small></label><input type="checkbox" name="unsubscribe_notifications" id="unsubscribe_notifications"> Receive an email notification with phone number when someone  new unsubscribes to 'BIZDEMO'
                        </div>
                        <div class="action clearfix top-margin">
                            <button class="button button-gray" type="submit" id="notifications_submit"><span class="accept"></span>Save</button>
                        </div>
                        </form>

и вызов AJAX:

<script type="text/javascript">
    jQuery(document).ready(function () {

        $("#notifications_submit").click(function() {


                var keyword_value = '<?php echo $keyword; ?>';
                var email_address = $("input#email").val();
                var subscribe_notifications_value = $("input#subscribe_notifications").attr('checked');
                var unsubscribe_notifications_value = $("input#unsubscribe_notifications").attr('checked'); 

                var data_values = { 
                    keyword : keyword_value,
                    email : email_address,
                    subscribe_notifications : subscribe_notifications_value,
                    unsubscribe_notifications : unsubscribe_notifications_value
                };


                $.ajax({
                    type: "POST",
                    url: "../includes/ajax/update_settings.php", 
                    data: data_values,
                    success: alert('Settings updated successfully!'),
                });
         });
    });

и получение страницы:

<?php
include_once ("../db/db_connect.php");

$keyword = FILTER_INPUT(INPUT_POST, 'keyword' ,FILTER_SANITIZE_STRING);
$email = FILTER_INPUT(INPUT_POST, 'email' ,FILTER_SANITIZE_EMAIL);
$subscribe_notifications = FILTER_INPUT(INPUT_POST, 'subscribe_notifications' ,FILTER_SANITIZE_STRING);
$unsubscribe_notifications = FILTER_INPUT(INPUT_POST, 'unsubscribe_notifications' ,FILTER_SANITIZE_STRING);


$table = 'keyword_options';
$data_values = array('email' => $email, 'sub_notify' => $subscribe_notifications, 'unsub_notify' => $unsubscribe_notifications);

foreach ($data_values as $name=>$value)
{

// See if keyword is already in database table
$filter = array('keyword' => $keyword);
$result = $db->find($table, $filter);

if (count($result) > 0 && $new != true)
{
    $where = array('keyword' => $keyword, 'keyword_meta' => $name);
    $data = array('keyword_value' => $value);
    $db->update($table, $where, $data); 
}
else
{
    $data = array('keyword' => $keyword, 'keyword_meta' => $name, 'keyword_value' => $value);
    $db->create($table, $data);
    $new = true; // If this is a new record, always go to else statement
}

}

unset($value);

Вот некоторые странные вещи, которые случаются:

  • Когда я только вводю текст в поле электронной почты (то есть - abc), он работает нормально, отправляет сообщения и т. Д.
  • Когда я вписываю поддельный адрес электронной почты с "." Перед "@", он отлично работает
  • Когда я ввожу проверенный адрес электронной почты (с "." После "@"), сообщение не будет выполнено.

Идеи?

Ответы [ 4 ]

0 голосов
/ 16 августа 2015

У меня тоже была такая же проблема ... вам нужно предотвратить функцию Default () на кнопке отправки. Затем продолжите публикацию.

 $("notifications_submit").click(function(ev){
  ev.preventDefault();
  //form variables
//post via ajax
}
);
0 голосов
/ 18 июня 2011

Попробуйте выбрать адрес электронной почты. http://www.w3schools.com/jsref/jsref_escape.asp

Я знаю, что вы используете тип: "POST", но давайте просто посмотрим.

0 голосов
/ 22 июня 2011

Я закончил тем, что использовал учебник с другого сайта и перестроил его с нуля ... приведенный ниже код jquery сработал.

jQuery(document).ready(function () {
          $("#settingsNotificationsForm").submit(function() {

                //setup variables  
                var form = $(this),  
                formData = form.serialize(),
                formUrl = form.attr('action'),
                formMethod = form.attr('method');
                /* responseMsg = $('#signup-response') */

                //send data to server  
                $.ajax({  
                    url: formUrl,
                    type: formMethod,
                    data: formData,
                    success:function(data){
                        alert('Settings updated successfully!');
                }  
            })

            //prevent form from submitting  
            return false;

         });
    });
0 голосов
/ 17 июня 2011

Если бы это был я, я бы сначала упростил вещи, передав сериализованную форму, а не отдельные переменные.Это тривиально, но, опять же, настройка всех этих различных переменных для индивидуального использования оставляет много места для ошибок.Чтобы сделать это, просто сделайте это:

 $.ajax({
    ...
    data:$('#formid').serialize(),
    ...
 });

Обратите внимание, что serialize отправляет сообщения на основе переменной name полей ввода.Убедитесь, что они установлены так, как вам нужно для продолжения.

Существует известная ошибка с символом @ в более старых версиях jQuery.Управление версиями, если вы отстали, также может решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...