我使用以下代碼來使用AJAX動態填充DropDown控件。每次單擊DropDown控件時,以下語句將查詢轉移到AJAX函數,然後轉發到.php文件以檢索數據庫結果。用於AJAX的查詢字符串不刷新
問題是,即使MySQL連接字符串與主機使用相同的遠程服務器的IP地址,相同的代碼在本地計算機上使用時仍能正常工作。但是,當我將文件上傳到遠程服務器時,所有DropDowns都會填充相同的結果。例如,如果有三個DropDowns即:區,選區,城市,並且如果我點擊說城市,則比其他所有的DropDowns還顯示列表中的城市。
我猜我在下面的AJAX函數中使用的查詢字符串不刷新。
[HTML下拉代碼示例]
<div id="divDistrict" name="divDistrict">
<select class="element select medium" id="inDistrict" name="inDistrict" onclick="MakeRequest('divDistrict', 'inDistrict', 'SELECT * FROM districtmaster');">
<option value="Select" selected="Select">Select</option>
</select>
</div>
[AJAX功能]
function MakeRequest(DivName, DropDownName, SqlQuery)
{
var xmlHttp = getXMLHttp();
var strUrl = "../Lib/filldropdown.php?DivName=" + DivName + "&DropDownControlName=" + DropDownName + "&SqlQuery=" + SqlQuery;
try
{
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
HandleResponse(xmlHttp.responseText, DivName);
}
}
xmlHttp.open("GET", strUrl, true);
xmlHttp.send(null);
}
catch(err)
{
alert(err);
}
}
[PHP的文件代碼]
<?php
require("dbconnection.php");
require("dbaccess.php");
$dropdownControlName = $_GET['DropDownControlName'];
$query = $_GET['SqlQuery'];
dbconnection::OpenConnection();
$result = dbaccess::GetRows($query);
?>
<select name=" <?php $dropdownControlName ?> ">
<option>Select from the list</option>
<?php while($row=mysql_fetch_array($result))
{ ?>
<option value="<?= $row[0] ?>"><?= $row[1] ?></option>
<?php } ?>
</select>
請忽略DBAccess & DBConnection參考。這些文件包含簡單的mysql_query & mysql_connect函數。另外,我意識到在查詢字符串中傳遞查詢的風險。一旦DropDown填充正常工作,我將修復它。
OFF:讓網頁傳遞SQL查詢是非常危險的。你的SQL服務器可能會被直接攻擊!我希望它不是生產代碼... – fviktor 2010-01-01 14:07:47
不,它不是生產代碼。正如我寫的,我將着手解決這個問題。 – RKh 2010-01-01 14:09:13