2011-01-28 128 views
-2

我的代码虽然PHP循环Javascript中

<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> 

我想这是一个while循环直到<?php $responseanswer = mysqli_fetch_array($result); ?>我如何呢?

+4

`json_encode()`不是JavaScript编码。 – BoltClock 2011-01-28 20:37:54

回答

0

你的意思是?

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

<? 
while($responseanswer = mysqli_fetch_array($result)) { 
?> 
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"; 
} 
<? 
} 
?> 
+0

谢谢...如果这不是更可取...可以给你一个解决方案 – sarthak 2011-01-28 20:40:24

+1

那么,在PHP方面,你已经知道将要在JavaScript端执行什么。因此,您正在通过这种方式浪费带宽和加载时间。在客户端,它总是会说'if(true)`或'if(false)`。您可以使用PHP决定发送给客户端的内容以及不发送的内容。 – pimvdb 2011-01-28 20:43:45

+0

你不应该这样写的另一个原因是随着你的代码库的增长,将PHP嵌入到JavaScript中变得越来越难以阅读。 – 2011-01-28 20:50:13

2

为了扩大在第一个答案,这里是一个可能的解决方案,不涉及来回切换JavaScript和PHP之间太多。我个人是模板引擎的粉丝(如Smarty),但这是我的下一个首选项(全部逻辑在PHP代码中,循环结束时的JavaScript只是显示为你工作)。

<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> 
0

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

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

<?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; 
    } 
?>