2013-02-25 90 views
2

我正在使用PHP和JavaScript,并且在处理JavaScript中的confirm()函数时遇到了问题。Javascript确认()函数无法正确传递参数

说我有一个页面add.php,首先我收到一些从另一个页面传递的参数,我检查它们是否有效。如果是的话,我只是将数据插入到数据库并返回到另一个页面,如果它们无效,弹出一个confirm()窗口,让用户选择是否继续。如果用户仍选择继续,我希望页面重新加载所有参数再次发送。但问题是,我第二次加载add.php时无法获取参数。

此前我没有使用window.onload函数和confirm()弹出,但一个< a href>链接,而不是一切工作正常(请参阅附加的代码在最后)。但是,当我尝试使用下面的代码,相同的URL停止工作

echo "<script type=\"text/javascript\">"; 
echo "window.onload = function() { 
    var v = confirm(\"$name is not alive, do you want to add it into system?\"); 
    if (v) { 
     window.location.href= \"add.php?type=room&amp;name=$name&amp;area\" 
      + \"=$area&amp;description=$description&amp;\" 
      + \"capacity=$capacity&amp;confirm=Y\"; 
    } else { 
     window.location.href= \"admin.php?area=$area\"; 
    } 
}"; 
echo "</script>"; 

以下是以前的版本,而不是使用window.onload(),我用< a href="..." />链接,一切都在那个时候工作得很好。 get_form_var是functions.inc中的一个函数,它使用$_GET数组获取参数。

<?php 
    require_once "functions.inc"; 
    // Get non-standard form variables 
    $name = get_form_var('name', 'string'); 
    $description = get_form_var('description', 'string'); 
    $capacity = get_form_var('capacity', 'string'); 
    $type = get_form_var('type', 'string'); 
    $confirm = get_form_var('confirm','string'); 

    $error = ''; 

    // First of all check that we've got an area or room name 
    if (!isset($name) || ($name === '')) 
    { 
     $error = "empty_name"; 
     $returl = "admin.php?area=$area" 
       . (!empty($error) ? "&error=$error" : ""); 
     header("Location: $returl"); 
    } 

    // we need to do different things depending on if its a room 
    // or an area 
    elseif ($type == "area") 
    { 
     $area = mrbsAddArea($name, $error); 
     $returl = "admin.php?area=$area" 
       . (!empty($error) ? "&error=$error" : ""); 
     header("Location: $returl"); 
    } 

    elseif ($type == "room") 
    { 
     if (isset($confirm)){ 
      $dca_osi = getOsiVersion($name); 
      $room = mrbsAddRoom(
       $name, 
       $area, 
       $error, 
       $description, 
       $capacity, 
       $dca_osi, 
       1 
      ); 
      $returl = "admin.php?area=$area" 
        . (!empty($error) ? "&error=$error" : ""); 
      header("Location:$returl"); 
     } 
     else { 
      $dca_status= pingAddress($name); 
      $dca_osi = getOsiVersion($name); 
      if($dca_status == 0){ 
       $room = mrbsAddRoom(
        $name, 
        $area, 
        $error, 
        $description, 
        $capacity, 
        $dca_osi, 
        0 
       ); 
       $returl = "admin.php?area=$area" 
         . (!empty($error) ? "&error=$error" : ""); 
       header("Location:$returl"); 
      } 
      else { 
       print_header(
        $day, 
        $month, 
        $year, 
        $area, 
        isset($room) ? $room : "" 
       ); 
       echo "<div id=\"del_room_confirm\">\n"; 
       echo "<p>\n"; 
       echo "$name is not alive, are you sure to add it into system?"; 
       echo "\n</p>\n"; 
       echo "<div id=\"del_room_confirm_links\">\n"; 
       echo "<a href=\"add.php?type=room&amp;name" 
        . "=$name&amp;area=$area&amp;description" 
        . "=$description&amp;capacity=$capacity&amp;confirm" 
        . "=Y\"><span id=\"del_yes\">" 
        . get_vocab("YES") . "!</span></a>\n"; 
       echo "<a href=\"admin.php?area=$area\"><span id=\"del_no\">" 
        . get_vocab("NO") . "!</span></a>\n"; 
       echo "</div>\n"; 
       echo "</div>\n"; 
      } 
     } 
    } 

    function pingAddress($host) 
    { 
     $pingresult = exec("/bin/ping -c 1 $host", $outcome, $status); 
     if ($status==0) { 
      return $status; 
     } 
     else { 
      return 1; 
     } 
    } 

    function getOsiVersion($host) 
    { 
     $community = 'public'; 
     $oid = '.1.3.6.1.4.1.1139.23.1.1.2.4'; 
     $sysdesc = exec("snmpwalk -v 2c -c $community $host $oid"); 
     $start = strpos($sysdesc, '"'); 
     if ($start!==false) { 
      $sysdesc = substr($sysdesc, $start+1,$sysdesc.length-1); 
      return $sysdesc; 
     } 
     else { 
      return "not available"; 
     } 
    } 
+0

该Javascript在哪些文件? add.php? – 2013-02-25 23:33:12

+0

我注意到原始版本和JS版本之间的一个区别是,在JS版本中,您没有传递confirm = Y作为URL的一部分。我不确定这是否是问题,虽然... – 2013-02-26 00:26:27

+0

虽然这可能是一个错误,但无论如何都需要纠正,否则它会显示您的页面会一直重复使用确认对话框重新加载。 – 2013-02-26 00:28:17

回答

0

您试过location.reload()javascript调用吗?

+0

嗨瑞安,我试过location.reload()但似乎我仍然无法获取参数的值。 – user1453951 2013-02-25 23:28:20

+0

您是否使用'$ _GET'全局数组来初始化var'$ name','$ description','$ type'? URL中的所有变量都可以在$ _GET中获取(在你的PHP代码中,不是javascript!) – MatRt 2013-02-25 23:32:06

+0

是的,第一次加载add.php时,所有参数的值都可以没有任何问题地获得,只有当我尝试通过确认窗口重新加载页面,我无法再次传递值。 – user1453951 2013-02-25 23:37:23

1

我已经解决了这个问题,只需简单地使用“&”而不是“& amp;”在URL链接...它现在正常工作...

+0

很高兴你知道了。我认为&符号是不必要的,但没有评论,因为我不认为他们会造成问题......现在我们知道了!在使用XHTML时,我认为URL中的&仅用于属性,而且我建议只使用常规HTML,除非您对XHTML有特殊需求。 – 2013-02-26 02:35:45

+0

仅供参考如果您的任何变量('$ name'等等),您的代码在原始版本中将失效,并在JS版本中失败)包含引号。我猜这在这种情况下不可能,但为了将来的参考,你可能想查看'urlencode'或更好(在本例中)'http_build_query'。 – 2013-02-26 02:58:14

+0

感谢您指出:)我会看看它。 Aucatlly,我仍然不知道为什么&符号不起作用,因为我在其他php页面中做了同样的事情... – user1453951 2013-02-26 19:37:15