2010-01-01 54 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請求的響應頭。)