我正在尝试制作一个确认框,它将需要执行哪些PHP代码。 继承我的代码:
<script type="text/javascript">
var answer = confirm('Are you sure?');
if(answer==true)
{
<?php $confirmation = 1; ?>
}
else
{
<?php define("CONFIRMATION", 1, true); ?>
}
alert('<?php echo $confirmation; ?>')
alert('<?php echo defined("CONFIRMATION"); ?>')
</script>
问题是,即使我单击YES,来自defined()函数的$ confirmation和boolean返回1。 无论我点击什么,(取消或确定)其中一个应该是0(我之前已经宣布$确认) 但是使用if和else块的两个代码! 通常它的工作原理如下
答案 0 :(得分:13)
你从根本上误解了PHP正在做什么。
在将页面发送到浏览器之前,在服务器上评估PHP。当浏览器看到它并执行javascript时,所有PHP都消失了。
使用您的浏览器&#34;查看来源&#34;在浏览器窗口中包含此代码。你会看到它看起来像这样:
<script type="text/javascript">
var answer = confirm('Are you sure?');
if(answer==true)
{
}
else
{
}
alert('1')
alert('1')
</script>
您需要在浏览器中运行要在javascript中执行的操作,或者需要向服务器发送新请求并使用您的响应获得新页面(直接或间接)。
答案 1 :(得分:10)
这将永远不会起作用,因为在输出发送到浏览器之前,PHP已经处理。如果您确实需要在PHP中修改某些内容,请尝试使用AJAX调用。
http://ajaxpatterns.org/XMLHttpRequest_Call
或者尝试使用jQuery的$.ajax();
函数。 Start by looking here
这是一个简单的例子:
<script type="text/javascript">
var answer = confirm('Are you sure?');
$.ajax({
type: 'GET',
url: '/path/to/script.php',
data: 'answer=' + answer,
success: function(response) {
alert(response);
}
});
</script>
script.php 的内容:
<?php
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
) {
// AJAX request
$answer = $_GET['answer'];
// ...
}
答案 2 :(得分:4)
如果没有发布/获取请求,则无法触发PHP代码执行。 根据您的需要,您应该选择表单submisssion或在确认时加载查询字符串中填充参数的页面链接。
P.S。 查询字符串参数是“?”后面的参数格式为variable = value
例如:
index.php?answered=1
然后您将能够使用PHP $ _POST,$ _GET或$ _REQUEST变量以这样的方式检索这些可变数值/值:
if ($_REQUEST['answered'] == 1) { //confirmed
...
}
答案 3 :(得分:3)
你误解了这里发生的事情的顺序。
首先,PHP将输出javascript图层。你的if块将如下所示:
if (answer == true)
{
}
else
{
}
javascript引擎应该优化它并完全忽略它。如果您需要让PHP使用javascript层的输入来处理某些内容,请考虑使用AJAX。
答案 4 :(得分:3)
通常它会像这样工作
不,它永远不会像这样。 PHP在javascript之前执行,所以它永远不会像这样工作。
我认为从我看到你会想要像
这样的东西<a href="?confirmation=1" onclick="return confirm('Are you sure?')">Your link</a>
这将转到当前页面,$_GET['confirmation']
设置为"1"
。
答案 5 :(得分:2)
php在javascript之前执行,所以你不能这样做因为 当你通过javascript检查它if else语句php已经执行,所以你不能这样做 但是你可以使用ajax