2013-02-25 108 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