而PHP在Javascript中循环

而PHP在Javascript中循环,php,javascript,ajax,Php,Javascript,Ajax,我的代码 if(){ //如果响应被拒绝 document.getElementById('hide').style.display=“无”; document.getElementById('onreject').style.display=“block”; } else if(){ //如果响应为“批准” document.getElementById('hide').style.display=“无”; document.getElementById('onapprove').style

我的代码


if(){
//如果响应被拒绝
document.getElementById('hide').style.display=“无”;
document.getElementById('onreject').style.display=“block”;
}
else if(){
//如果响应为“批准”
document.getElementById('hide').style.display=“无”;
document.getElementById('onapprove').style.display=“block”;
}
其他的
{
document.getElementById('hide').style.display=“block”;
}
我希望它在一个while循环中,直到
我该怎么做?

你是说这个吗

无论如何,在我看来,像这样结合JavaScript和PHP并不可取

<script type="text/javascript">
    if(<?php echo json_encode($re=='reject'); ?>){
        //if response is reject
        document.getElementById('hide').style.display = "none"; 
        document.getElementById('onreject').style.display="block";
    }

    else if(<?php echo json_encode($re=='approve'); ?>){
        //if response is approve
        document.getElementById('hide').style.display = "none"; 
        document.getElementById('onapprove').style.display = "block";
    }
    else
    {
        document.getElementById('hide').style.display="block";
    }
</script>

if(){
//如果响应被拒绝
document.getElementById('hide').style.display=“无”;
document.getElementById('onreject').style.display=“block”;
}
else if(){
//如果响应为“批准”
document.getElementById('hide').style.display=“无”;
document.getElementById('onapprove').style.display=“block”;
}
其他的
{
document.getElementById('hide').style.display=“block”;
}

为了扩展第一个答案,这里有一个可能的解决方案,它不需要在JavaScript和PHP之间来回切换太多。我个人喜欢模板引擎(比如),但这是我的下一个偏好(所有的逻辑都在PHP代码中,循环末尾的JavaScript只为你做显示工作)



EWW。这使得它很难阅读,我认为这样的解决方案会更好。(但不是最好的)。最好是有一个js函数,知道如何处理隐藏和显示的内容,或者在标记元素中添加样式,或者不显式输出id

无论哪种方式,这都应该更具可读性,并且更容易添加额外的元素

<script>
<?php
while($responseanswer = mysqli_fetch_array($result)) {
  // This is probably not how your code does it, but I don't know your table structure
  $re = $responseanswer[0];
  $div_to_show = "";

  // whether to show the element with ID "hide"
  $hide_display_style = 'none';

  // Decide now what divs we want visible and hidden
  if($re == 'reject') $div_to_show = 'onreject';
  else if($re == 'approve') $div_to_show = 'onapprove';
  else $hide_display_style='block';

  echo "document.getElementById('hide').style.display = '$hide_display_style';\n";
  if($div_to_show) {
    echo "document.getElementById('$div_to_show').style.display = 'block';\n";
  }
}
?>
</script>


json_encode()
不是JavaScript编码。在PHP端,您已经知道JavaScript端将执行什么。因此,这样做是在浪费带宽和加载时间。在客户端,它总是说
if(true)
if(false)
。使用PHP,您可以决定向客户端发送什么和不发送什么。不应该以这种方式编写的另一个原因是,随着代码库的增长,将内联PHP与JavaScript混合在一起变得越来越不可读。将JS像这样包装在PHP循环中会重复整个if/else if/else JavaScript块N次,fetch_数组的每个元素一个。由于每个重复的块都引用相同的“hide”、“onreject”和“onapprove”元素,因此这甚至不能满足您的需要。如果数组中有3个元素['reject'、'approve'、'None'],则第一个If block through将设置为onreject to block,第二个If block through将设置为onapprove to block,第三个If block将设置为hide to block,因此所有3个元素都将可见。请记住:当Javascript执行PHP时,PHP已经不存在了。@stephne很好的解释..这就是正在发生的事情。你能提供一个更好的解决方案吗?@sarthak我想你已经得到了足够的建议,现在可以解决这个问题了。嘿..这太神奇了..但是批准和拒绝都不起作用。人们不能总是在一分钟内回复。我打了几个错别字,但现在应该是正确的。然而,由于我不知道您的整个应用程序(但只知道您向我们展示的内容),我不可能编写完全正确的内容。特别是,循环的每次迭代都会尝试更改相同div的值,这可能不是您真正想要的。@sarthak为什么要使用JavaScript隐藏元素?您可以通过PHP更容易地确定类名,并使用CSS.approvedocument.getElementById(“offbox”).style.display=“block”定义可见性;ApprovedDocument.getElementById(“onreject”).style.display=“无”;ApprovedDocument.getElementById(“onapprove”).style.display=“无”;仍然…元素正在显示。这是伪代码——所以我很快就想到了它。缺少逗号。不过,你应该了解大概情况。尽可能将逻辑与界面分离。。。从长远来看,这会让你的生活更轻松。在你发布一百万篇帖子之前,你需要了解你想做什么。我们是来帮助你的,不是为你做你的工作。我修正了编辑,但你应该试着理解我们试图为你解决的问题。看来你只在乎它是否有效。。。。
<script>
<?php
while($responseanswer = mysqli_fetch_array($result)) {
  // This is probably not how your code does it, but I don't know your table structure
  $re = $responseanswer[0];
  $div_to_show = "";

  // whether to show the element with ID "hide"
  $hide_display_style = 'none';

  // Decide now what divs we want visible and hidden
  if($re == 'reject') $div_to_show = 'onreject';
  else if($re == 'approve') $div_to_show = 'onapprove';
  else $hide_display_style='block';

  echo "document.getElementById('hide').style.display = '$hide_display_style';\n";
  if($div_to_show) {
    echo "document.getElementById('$div_to_show').style.display = 'block';\n";
  }
}
?>
</script>
<?php
    switch ($re) {
        case 'reject':
            $styles = array(
                'hide'      => 'none',
                'onreject'  => 'block',
                'onapprove' => 'none'
            );
            break;
        case 'approve':
            $styles = array(
                'hide'      => 'none',
                'onreject'  => 'none',
                'onapprove' => 'block'
            );
        default:
            $styles = array(
                'hide'      => 'block',
                'onreject'  => 'none',
                'onapprove' => 'none'
            );
    }

    foreach ($styles as $id => $value) {
        echo 'document.getElementById("' , $id, '").style.display="', $value, '";', PHP_EOL;
    }
?>