【发布时间】: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 - 不幸的是,这仍然不起作用。 :(