【发布时间】:2013-02-25 23:21:28
【问题描述】:
我正在使用 PHP 和 JavaScript,但在处理 JavaScript 中的 confirm() 函数时遇到了问题。
假设我有一个页面add.php,首先我收到一些从另一个页面传递过来的参数,然后我检查它们是否有效。如果是,我只是将数据插入db并返回另一个页面,如果它们无效,则会弹出一个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&name=$name&area\"
+ \"=$area&description=$description&\"
+ \"capacity=$capacity&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&name"
. "=$name&area=$area&description"
. "=$description&capacity=$capacity&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";
}
}
【问题讨论】:
-
那个 Javascript 在什么文件中? add.php?
-
我注意到原始版本和 JS 版本之间的一个区别是,在 JS 版本中,您没有将 confirm=Y 作为 URL 的一部分传递。我不确定这是否是问题所在......
-
这可能是一个需要在任何情况下纠正的错误,否则您的页面似乎会一遍又一遍地通过确认对话框重新加载。
-
javascript 在 add.php 中。对 JS 中的 url 链接感到抱歉,只是把它改回来了,即使在 HTML 中工作的相同 url 在 JS 中也不起作用。
-
对话框不会一次又一次地加载,因为一旦在确认窗口点击“确定”,add.php 将被重新加载但它无法接收$name 的值,因此它会生成一个错误并返回到 admin.php。
标签: php javascript window