【问题标题】:Alert after executing php script while not leaving current page [duplicate]在不离开当前页面的情况下执行 php 脚本后发出警报 [重复]
【发布时间】:2015-12-31 04:40:03
【问题描述】:

我有一个带有两个提交按钮的页面,使用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>

updateUserConfig.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------}

【问题讨论】:

  • Ajax 绝对是要走的路。你应该走那条路,然后问这个问题,可能是在一个新问题中。
  • 我没有收到关于已发送标头的任何错误,所以我不确定这个问题是如何重复的
  • @marc 我还是个新手,我已经查看了帖子,上面说我的问题已经得到解答,但我找不到任何可以帮助我找到解决方案的东西。我已经为此工作了几天。我对实际在堆栈溢出上发布内容也很陌生,并且发现我可以花这么多时间进行研究令人沮丧,当我最终寻求帮助时,我的问题被关闭并模糊的负面回应
  • 你在header()之前有echo语句,这意味着你已经执行了输出,它会自动发送http响应头

标签: javascript php ajax forms post


【解决方案1】:

这并不容易...如果您将表单提交到 IFRAME 中,您可以这样做,但现在这已被认为过时了。但是,只需进行少量更改,它就可以与您当前的代码一起使用 - 您只需更改表单标签并添加 iframe 元素:

<iframe name="myIframe" id="myIframe"></iframe>
<form action="updateUserConfig.php" method="post" target="myIframe">

这样你可以在 POST 之后发出警报,但由于接收 php 将在 iframe 内运行,你必须使用 javascript 来导航 (原始)页面。这部分很简单——只是非常不寻常。你必须做一个

parent.location="mynextpage.php"

实现这一点。此外,这对跨域事物也有限制。 (对于这些问题,谷歌搜索“Access-Control-Allow-Origin”,这是官方的解决方案——你也可能会看到一些肮脏的变通方法。)

当然,有了 AJAX,一切都不同了。但我无法在一篇文章中解释这一点 - 它需要一种相反的方法,您提交表单,从处理帖子的 php 脚本中取回一些东西然后您的原始 javascript 将发出警报.如果你以前没有这样做过,我不会推荐这种方式。

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多