我有一个带有两个提交按钮的页面,使用
if ($_POST['action'] == 'Test SMS')
为我的“测试短信”按钮执行代码。我需要从 PHP 脚本执行代码,然后在不离开页面的情况下给出警告框。
我一直读到ajax是执行此操作的方法,并且我已经尝试过,但是index.php和updateUserConfig.php位于不同的服务器上,所以我遇到了跨域错误。
似乎我没有正确使用
header()
函数,但当前的代码几乎完全符合我的要求。它执行脚本而不离开页面,但我没有收到警报弹出窗口。
我尝试使用js进行重定向,但直到单击警报按钮上的“确定”后它才会重定向,因此在此之前浏览器将定向到我不想要的空页面。
我尝试在index.html上使用JS,但是在执行脚本之前我收到了警报,并且我无法轻松访问PHP变量来警报测试文本发送到哪个电话号码。
index.html
<form action="updateUserConfig.php" method="post">
<input type='submit' name='action' value='Test SMS' class='btn-test'>
<input type="submit" name="action" value="Save" class="btn btn-primary">
</form>
更新用户配置.php
if ($_POST['action'] == 'Test SMS') { //action for Test SMS Button
//grab ntid and phone from header
if(isset($_POST['ntid'])) $ntid = $_POST['ntid'];
if(isset($_POST['phone'])) $phone = $_POST['phone'];
//using the notify_sms_users funtion from send_notification.php
require 'send_notification.php';
notify_sms_users(array($ntid), "", 4);
//alert user that there message has been sent
$alert = "Your message has been sent to " . $phone;
echo '<script type="text/javascript">alert("'.$alert.'");';
echo '</script>';
header('Location: index.php');
} else {-----action for other submit button------}
这并不容易...如果您将表单提交到 IFRAME 中,您可以这样做,但如今这被认为已经过时了。然而,只需进行最小的更改,它就可以与您当前的代码一起使用 - 您只需更改表单标签并添加 iframe 元素:
<iframe name="myIframe" id="myIframe"></iframe>
<form action="updateUserConfig.php" method="post" target="myIframe">
这样您就可以在 POST 后发出警报,但由于接收 php 将在 iframe 内运行,您必须使用 javascript 来导航 parent(原始)页面。这部分很简单——只是非常不寻常。你必须做一个
parent.location="mynextpage.php"
为了实现这一点。此外,这对于跨域也有限制。 (对于这些问题,谷歌搜索“Access-Control-Allow-Origin”,这是官方解决方案 - 你可能也会看到一些肮脏的解决方法。)
当然,有了 AJAX,一切都不同了。但我无法在一篇文章中解释这一点 - 它需要一种相反的方法,您提交表单,从处理该帖子的 php 脚本中获取一些内容
然后您的原始 JavaScript 将发出警报。如果您以前没有这样做过,我不会推荐这种方式。