2011-10-05 25 views
0

我在這裏遇到一個奇怪的問題,那就是我正在開發的網站上的AJAX調用正在返回當前所有頁面的所有html標記,正如您在此處所看到的。這個函數應該只是從用戶選擇的州和城市的數據庫中返回一個郵政編碼。AJAX錯誤:響應是當前頁面的html

Ajax response

我使用本網站保羅愛爾蘭的HTML5樣板Modernizr的和做跨瀏覽器兼容的開發更容易。雖然我以前沒有遇到過這些問題,但我開始認爲我與HTML5 Boilerplate使用的某個腳本存在某種類型的JavaScript腳本衝突。

這裏的JS:

function getCitiesFromState(state, select) 
{ 
    if (window.XMLHttpRequest) 
    { 
     x = new XMLHttpRequest(); 
    } 
    else 
    { 
     x = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    var ran = Math.round((new Date()).getTime()/1000), 
    terms = "state="+state+'&r='+ran, loader; 

    x.open("POST", "inc/ajax/cities-from-state.php", true); 
    x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 

    x.onreadystatechange = function() 
    { 
     select == 'fcity' 
     ? loader = 'fzip-loader' 
     : loader = 'tzip-loader'; 

     $('#' + loader).show(); 

     if (x.readyState==4 && x.status==200) 
     { 
      $('#' + select).html(x.responseText); 
      $('#' + loader).hide(); 
     } 
    } 
    x.send(terms); 
} 

我知道jQuery有豐富的AJAX功能,但我總是試着去理解背後我的代碼的基礎技術使用庫或簡寫,使其更容易了。

這裏的PHP:

<?php 
    include 'db.class2.php'; 

    $DB = new DB_MySql; 
    $DB->connect(); 

    $state = $_POST['state']; 

    $q = $DB->query(" 
     SELECT DISTINCT `city`, `zip_code` 
     FROM `usa_master` 
     WHERE `state` = '".addslashes($state)."' 
     GROUP BY `city` 
     ORDER BY `population` DESC LIMIT 0, 150" 
    ); 

    $count = 0; 
    while($r = $DB->fetch_assoc($q)) 
    { 
     $city[] = $r['city']; 
     $zips[$count] = $r['zip_code']; 

     if (4 == strlen($zips[$count])) 
     { 
      $zips[$count] = '0' . $zips[$count]; 
     } 

     $count++; 
    } 

    array_multisort($city, $zips); 
    echo '<option value="" selected="selected">Select City</option>'; 
    $size = sizeof($city); 

    for($x=0; $x<$size; $x++) 
    { 
     echo '<option class="city_list" value="'.$zips[$x].'">'.$city[$x].'</option>'; 
    } 

    $DB->close(); 
?> 

在一個側面說明,我注意到偶爾(也許每10個時間我刷新),我是越來越亂的jQuery相關的JavaScript錯誤,具有與jQueryUI的做datepicker我正在使用。我在想這裏有一個關聯,我錯過了。

+0

捕獲被調用的URL並將其輸入到瀏覽器的地址欄中,看看你得到了什麼。順便說一句:如果你使用jQuery,你爲什麼使用XMLHttpRequest而不是jQuery的AJAX手柄? –

+0

仍然是AJAX的新功能... - >我知道jQuery具有豐富的AJAX功能,但我總是試圖瞭解使用庫或簡寫使用起來更容易之前我的代碼背後的基礎技術。 – k4t434sis

+0

我想這裏的答案隱藏 - 'x.open(「POST」,「inc/ajax/cities-from-state.php」,true);'試着把這個叫做「/ inc/ajax/cities-from-state。 PHP「,如果你的頁面像http://www.yourserver.com/和cities-from-state.php在http://www.yourserver.com/inc/ajax/cities-from-state.php –

回答

0

@Diodeus就是這樣。我編寫了所有我的javaScript,而模板化這個新網站,但我最近編碼的導航結構,顯然這個.htaccess規則(RewriteRule ^(.*).php template.php?page=$1 [NC])正在重定向我的AJAX請求到我服務的404頁面。謝謝!