我在这里遇到一个奇怪的问题,我正在开发的网站上的AJAX调用正在返回我当前所在的任何页面的所有html标记,如此处所示。此函数应该仅从数据库返回用户选择的州和城市的邮政编码。
我在这个网站上使用Paul Irish的HTML5 Boilerplate和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 :(得分:0)
@Diodeus就是这样。我在模拟这个新站点的同时编写了我的所有javaScript,但我最近编写了导航结构,显然这个.htaccess规则(RewriteRule ^(.*).php template.php?page=$1 [NC]
)正在将我的AJAX请求重定向到我服务的404页面。谢谢!