【问题标题】:Ajax post not posting email address?Ajax 帖子没有发布电子邮件地址?
【发布时间】:2015-08-16 07:07:25
【问题描述】:

更新:它不适用于 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)时,它可以正常工作、正确发布等等。
  • 当我输入带有“.”的虚假电子邮件地址时在“@”之前,它工作正常
  • 当我输入经过验证的电子邮件地址(“@”后带有“.”)时,发帖失败。

想法?

【问题讨论】:

  • 当您说发布失败时,您的意思是它永远不会到达 PHP 页面(因为 ajax 请求已停止),或者您的意思是 id 没有返回您期望的结果?旁注:我不认为 type="submit" 是按钮的属性。我相信您正在寻找 input type="submit",但是您必须在 click 函数中终止事件默认操作。
  • 我的意思是当我输入一个真实的电子邮件地址 email@domain.com 时,该帖子不会发布任何内容。但是当我输入像“abc”这样的电子邮件地址时,它就可以发布了。
  • 我确实把它缩小到只在 Firefox 中不工作。任何想法为什么会这样?
  • 嗯,已经 4 小时了。你有什么进展吗?尝试将您的 jq 版本指向 google 1.5 版本,看看这是否不能解决任何问题,因为我现在使用非常相似的 ajax 调用并且它很好。
  • @meteorainer - 不幸的是,这仍然不起作用。 :(

标签: php ajax firefox post


【解决方案1】:

如果是我,我会首先通过传递序列化形式而不是单个变量来简化事情。这是微不足道的,但是再次设置所有这些不同的变量以单独进入确实留下了很大的错误空间。要做到这一点,只需这样做:

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

请注意,序列化是根据输入字段的名称变量发送的。确保根据需要进行设置。

There is a known bug with the @ symbol 在旧版本的 jQuery 中。如果您落后,升级版本也可以解决问题。

【讨论】:

  • 我在 1.4.2 的 jQuery 上,所以不是这样。我序列化了表格,但也没有修复它。 :(
  • 我确实把它缩小到只在 Firefox 中不工作。任何想法为什么会这样?
  • 它在控制台上有一个帖子失败,并出现引用 jQuery 的错误。不知道还能做什么。
【解决方案2】:

尝试转义电子邮件地址。 http://www.w3schools.com/jsref/jsref_escape.asp

我知道您使用的是 type: "POST" ,但让我们看看。

【讨论】:

  • 我试过了,但它没有做任何事情,因为 AJAX,类型 post 已经对所有内容进行了编码,因此,它得到“双重编码”:(
  • hmmm,你能给我们一个包含和不包含有效电子邮件的帖子的 var_dump 吗?
  • 我确实缩小了范围,只在 Firefox 中不工作。任何想法为什么会这样?
【解决方案3】:

我最终使用了来自不同站点的教程并从头开始重新构建它......下面的 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;

         });
    });

【讨论】:

    【解决方案4】:

    我也有同样的问题。你需要在提交按钮上设置 preventDefault() 。 然后继续发帖。

     $("notifications_submit").click(function(ev){
      ev.preventDefault();
      //form variables
    //post via ajax
    }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2017-03-01
      相关资源
      最近更新 更多