2010-01-01 20 views
1

我使用以下代码来使用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填充正常工作,我将修复它。

+0

OFF:让网页传递SQL查询是非常危险的。你的SQL服务器可能会被直接攻击!我希望它不是生产代码... – fviktor 2010-01-01 14:07:47

+0

不,它不是生产代码。正如我写的,我将着手解决这个问题。 – RKh 2010-01-01 14:09:13

回答

0

好的,解决了这个问题。我找出了这个问题。与行的PHP代码:

<select name=" <?php $dropdownControlName ?> "> 

需要与此

<select name="<?php echo $dropdownControlName; ?>"> 

现在正在被纠正。谢谢大家。

2

运行FiddlerFirebug并检查到底发送到服务器的内容。

+1

事实上,Firebug是最好的解决办法。:) – fviktor 2010-01-01 14:11:03

+0

也尝试在Firefox中安装“Web Developer”工具栏,这也非常方便。 – fviktor 2010-01-01 14:13:23

+0

我需要检查FireBug中的“控制台”选项卡吗?在那里,它显示DropDown代码与所有DropDowns具有相同的选项。 – RKh 2010-01-01 14:14:41

1

这样的问题的常见原因:

  • 您上传脚本错误的方式。
  • 将相同的项目列表意外加载到所有选择元素中。 (由于错别字等)
  • 您的服务器安装了某种“缓存”。
  • 您和服务器之间有一个代理,它不考虑GET参数中的更改。
  • 浏览器以某种方式缓存结果,例如由于Web服务器自动添加缓存标头。 (检查Firebug中XHR请求的响应头。)