【问题标题】:Display PHP output in Ajax Popup在 Ajax 弹出窗口中显示 PHP 输出
【发布时间】:2014-07-29 02:55:53
【问题描述】:

大家好!所以我是一个菜鸟,我的大部分代码都是由程序员为我完成的。我现在不能让他帮助我。

我有一个无需重新加载页面即可显示结果(由 calc.php 生成)的计算器。 演示在这里:http://www.roofingcalculator.org/popup/popup.htm

现在我从这里添加了 Ajax 弹出窗口(联系表单):http://dimsemenov.com/plugins/magnific-popup/,它可以工作了。

我想要的是在popop里面显示calc.php的结果,但是它不起作用。

详情:

当用户单击“计算”按钮时,表单使用 POST 将信息发送到 CALC.JS,然后 CALC.JS 将信息发送到 CALC.PHP 并使用此标签在页面上显示结果:

<span id="CalcSum">Results:</span>

当我将 SPAN 标签添加到弹出窗口时,它不显示 PHP 的结果。

问题如何在 AJAX 弹出窗口中显示结果??

请帮助 - 我非常感谢任何帮助 - 干杯!

Calc.js 内容:

var XmlHttp;
function GetXmlHttpObject() {
   var XmlHttp = null;
   try {
      XmlHttp = new XMLHttpRequest();
   } catch (e) {
      try {
         XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
   }
   return XmlHttp;
}
function StateChanged() {
   if (XmlHttp.readyState == 4 || XmlHttp.readyState == "complete") {
      document.getElementById("CalcSum").innerHTML = XmlHttp.responseText;
   }
}
function ShowSum(url, params) {
   XmlHttp = GetXmlHttpObject();
   if (XmlHttp == null)
      return;
   XmlHttp.onreadystatechange = StateChanged; 
   XmlHttp.open('POST', url, true);
   XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   XmlHttp.setRequestHeader("Content-length", params.length);
   XmlHttp.setRequestHeader("Connection", "close");
   XmlHttp.send(params);
}

function GetInfo() {var str = 
"size1=" + escape(encodeURI(document.getElementById("size1").value)) +
"&size2=" + escape(encodeURI(document.getElementById("size2").value));

ShowSum('http://www.website.com/calc.php', str);
}

calc.php

<?php
$size1_val    = empty($_POST['size1'])      ? '0'       : $_POST['size1'];
$size2_val    = empty($_POST['size2'])      ? '0'       : $_POST['size2'];
$total_size = $size1_val * $size2_val;
print "Result: ". round($total_size). "";
?>

HTML 表单:

<table>
<script type="text/javascript" src="calc.js"></script>
<form id="formcalc" action="javascript:GetInfo();" accept-charset="UNKNOWN" 
enctype="application/x-www-form-urlencoded" method="post">
<tr>
<td height="24" ><strong>Sizes:</strong>
</td>
<td height="24" valign="top" width="50%">
<input id="size2"/> x <input id="size1" s/> ft.
</td>
</tr>
<tr>
<td COLSPAN="2">
<input name="calc" type="submit" value="Calculate" />

<span id="CalcSum">Results:</span>
</form>
</td>
</tr>
</table>

【问题讨论】:

  • 你在 StateChanged 函数中尝试 alert(XmlHttp.responseText) 并检查响应是否正常
  • 仍然不确定为什么您没有在 JS 中完成所有计算。它会更快,并且在您的网络服务器上使用更少的资源。
  • 您能详细说明一下吗?我不知道 JS ...我究竟应该改变什么?
  • Version - 计算器比这更复杂(我没有提供完整的代码,因为它无关紧要)而且我不希望其他人使用代码 - 这就是我使用 JS + PHP 的原因。 ..我以前被偷过:(

标签: javascript php jquery ajax magnific-popup


【解决方案1】:

$('.popup-with-form').magnificPopup('open'); 添加到您的 stateChanged 函数中,如下所示。在你的例子中为我工作。更改了两个结果范围并打开了弹出窗口。

function StateChanged() {
   if (XmlHttp.readyState == 4 || XmlHttp.readyState == "complete") {
       $('.popup-with-form').magnificPopup('open');
      document.getElementById("CalcSum").innerHTML = XmlHttp.responseText;
      document.getElementById("CalcSumPopup").innerHTML = XmlHttp.responseText;
   }
}

更新:如果您需要更多文档,请点击此处http://dimsemenov.com/plugins/magnific-popup/documentation.html

【讨论】:

  • 太棒了 - 完美运行!非常感谢。我希望我也可以帮助你一些事情!附带说明 - 在结果/弹出窗口出现之前似乎有一点延迟(0.5-1 秒) - 是因为 PHP 或 JS 速度慢吗? PS - 我看过文档,但我不明白:)
  • 还有一个问题:我怎样才能让弹出窗口在每个会话中只显示一次?假设用户第二次点击“计算”,页面上只显示结果,第二次没有弹出窗口?
【解决方案2】:

Ajax 弹出窗口的 html 是否与表单在同一页面上?如果有,请添加

<span id="CalcSumPopup">Results:</span>

到您希望结果去的弹出窗口并添加

document.getElementById("CalcSumPopup").innerHTML = XmlHttp.responseText;

在 Calc.js 中 document.getElementById("CalcSum").innerHTML = XmlHttp.responseText; 之后。

如果不在同一个页面上,这将不起作用。

编辑: 这是有效的,因为 id 是唯一的。 getElementById 将找到指定 id 的第一次出现然后停止,因此如果您想要更改多个位置,您需要为它们提供唯一的 id。

【讨论】:

  • 太棒了!!!非常感谢您!!!!你很棒!后续问题:如何在 BOTH 页面和 POPUP 中显示结果(以防用户关闭弹出窗口)?
  • 后续问题:如何在两个页面和弹出窗口中显示结果(以防用户关闭弹出窗口)?目前,弹出窗口的调用如下:&lt;a class="popup-with-form" href="#test-form"&gt;popup&lt;/a&gt;如何使“计算”按钮触发弹出并在页面上显示结果?
  • 如果计算按钮关闭,您希望它打开弹出窗口吗?
  • 不,我想让“计算”按钮做 2 件事:1) 使用 CalcSumPopup 打开弹出窗口 2) 在页面上显示结果(就像现在一样) - 显示CalcSum 弹出窗口的“触发器”是 class="popup-with-form" href="#test-form",但如果我将其添加到“计算”按钮,&lt;input class="popup-with-form" href="#test-form" name="calc" type="submit" value="Calculate" /&gt; 结果不会显示在 PAGE 或 POPUP 上
  • 我不确定我是否有足够的信息。尝试添加 window.location.href="#test-form";到计算按钮触发代码或在 document.getElementById("CalcSum").innerHTML = XmlHttp.responseText;在 Calc.js 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多