【问题标题】:Using PHP in javascript's IF Statement [duplicate]在 javascript 的 IF 语句中使用 PHP [重复]
【发布时间】:2012-01-12 19:46:44
【问题描述】:

我正在尝试制作一个确认框,它将希望执行哪个 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>

问题是,即使我单击“是”,$confirmation 和 defined() 函数中的布尔值也会返回 1。 无论我点击什么,(取消或确定)其中一个应该是 0 (我之前已经声明过 $confirmation ) 但是 if 和 else 块的代码都被使用了! 通常它是这样工作的

【问题讨论】:

    标签: javascript php if-statement


    【解决方案1】:

    这永远不会奏效,因为 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'];
            // ...
        }
    

    【讨论】:

    • 所以这意味着我不能处理我的 php 代码引用确认框值?
    • 您可以在 PHP 脚本 中。这就是使用 AJAX 的目的。
    【解决方案2】:

    你误解了这里发生的事情的顺序。

    首先,PHP 将输出 javascript 层。您的 if 块将如下所示:

    if (answer == true)
    {
    }
    else
    {
    }
    

    然后,javascript 引擎应该优化它并完全忽略它。如果您需要让 PHP 处理来自 javascript 层的输入,请考虑使用 AJAX。

    【讨论】:

      【解决方案3】:

      您从根本上误解了 PHP 在做什么。

      在页面发送到您的浏览器之前,PHP 会在服务器上进行评估。当浏览器看到它并执行 javascript 时,所有的 PHP 都消失了。

      在包含此代码的浏览器窗口中使用浏览器的“查看源代码”。你会看到它看起来像这样:

      <script type="text/javascript">
      var answer = confirm('Are you sure?');
      
      if(answer==true)
         {
                   } 
      else 
         { 
                   }
           alert('1')
           alert('1')
      </script>
      

      您需要在 javascript 中实现您想要在浏览器上运行的操作,或者您需要向服务器发送一个新请求,并通过您的响应(直接或间接)返回一个新页面。

      【讨论】:

        【解决方案4】:

        通常是这样的

        不,它永远不会像这样工作。 PHP 在 javascript 之前执行,所以它永远不会像这样工作。

        我认为从我所看到的你会想要类似的东西

        <a href="?confirmation=1" onclick="return confirm('Are you sure?')">Your link</a>
        

        这将转到$_GET['confirmation'] 设置为"1" 的当前页面。

        【讨论】:

          【解决方案5】:

          如果没有 post/get 请求,您将无法触发 PHP 代码执行。 根据您的需要,您应该在提交表单或加载页面链接之间进行选择,并在确认时将参数填充在查询字符串中。

          附: 查询字符串参数是“?”之后的参数。格式为变量=值

          例如:

          index.php?answered=1
          

          然后您将能够使用 PHP $_POST、$_GET 或 $_REQUEST 变量以如下方式检索这些变量/值:

          if ($_REQUEST['answered'] == 1) { //confirmed
          ...
          }
          

          【讨论】:

            【解决方案6】:

            php 在 javascript 之前执行,所以你不能这样做,因为 当您通过 javascript 检查时,如果 else 语句 php 已经执行,因此您无法执行此操作 但是你可以使用 ajax 来实现它

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-05-29
              • 1970-01-01
              • 1970-01-01
              • 2021-06-08
              • 1970-01-01
              • 2016-09-28
              • 2015-03-01
              • 2013-08-08
              相关资源
              最近更新 更多