【发布时间】:2013-04-04 22:03:34
【问题描述】:
我正在使用 jQuery/JS/Ajax 脚本从我的数据库中动态填充 SELECT 框,每个后续的 SELECT 框都根据前一个 SELECT 填充。
例如。有人从我的第一个 SELECT 中选择“英格兰”,然后在下一个 SELECT 中填充英格兰的城镇等。
我遇到的麻烦是让第二个 SELECT 函数识别变量。这是很多代码,所以我不想全部粘贴,但是...这是第一个在页面加载时填充第一个 SELECT 框的函数:
function getTierOne()
{
$tblname = $_SESSION['country'];
$result = mysql_query("SELECT DISTINCT county FROM $tblname ORDER BY county")
or die(mysql_error());
while($tier = mysql_fetch_array( $result ))
{
echo '<option value="'.$tier['county'].'">'.$tier['county'].'</option>';
}
}
这很好,$tblname 是一个已发布的 $_SESSION 变量,其中包含用户国家/地区 obvs。
问题是第一个 SELECT 框的“onBlur”,使用这个 JS 函数和 PHP 调用会调出第二个 SELECT 框:
$(document).ready(function()
{
$('#wait_1').hide();
$('#drop_1').change(function()
{
$('#wait_1').show();
$('#result_1').hide();
$.get("func.php",
{
func: "drop_1",
drop_var: $('#drop_1').val()
},
function(response)
{
$('#result_1').fadeOut();
setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
});
return false;
});
});
...
if (isset($_GET['func'])&& $_GET['func'] == "drop_1") {
drop_1($_GET['drop_var']);
}
调用这个函数:
function drop_1($drop_var)
{
include_once('functions.php');
$result = mysql_query("SELECT DISTINCT town FROM $tblname WHERE county='$drop_var'")
or die(mysql_error());
echo '<select name="drop_2" id="drop_2">
<option value=" " disabled="disabled" selected="selected">Select Your Town/Nearest Town</option>';
while($drop_2 = mysql_fetch_array( $result ))
{
echo '<option value="'.$drop_2['town'].'">'.$drop_2['town'].'</option>';
}
echo '</select>';
echo '<input type="submit" name="submit" value="Continue" />';
}
但是这个函数不能识别我的 $tblname 变量,即使我使用全局!它唯一识别的变量是 $drop_var,它是第一个 SELECT 框的结果。
有谁知道如何将 $tblname 变量传递给
function drop_1($drop_var) { ...
【问题讨论】:
-
onBlur在客户端浏览器上工作,而不是在服务器上,除非你使用ajax,否则你不能在javascript事件上运行php函数 -
我只是使用 onBlur 作为一个糟糕的描述,一旦从第一个 SELECT 中进行选择,这将调用一个 JS 函数,该函数又调用 PHP 函数 - 我会将 JS 添加到我的问题。
-
同理,不能从javascript调用php函数
-
它按原样工作,只是我必须将实际表名放在第二个函数中,而我希望能够使用变量。