【发布时间】:2011-10-05 16:14:28
【问题描述】:
我在这里遇到了一个奇怪的问题,我正在开发的网站上的 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 日期选择器有关。我在想这里有一个我遗漏的相关性。
【问题讨论】:
-
捕获被调用的 URL 并将其输入到浏览器的地址栏中,看看你得到了什么。 BTW:如果你使用 jQuery,为什么你使用 XMLHttpRequest 而不是 jQuery 的 AJAX 处理程序?
-
AJAX 还是新手... ->我确实知道 jQuery 具有广泛的 AJAX 功能,但我总是在使用库或速记使其更容易之前尝试了解代码背后的底层技术。
-
我猜答案隐藏在这里 -
x.open("POST", "inc/ajax/cities-from-state.php", true);尝试调用此“/inc/ajax/cities-from-state.php”,如果您的页面类似于 yourserver.com 和 city-from-state .php 位于yourserver.com/inc/ajax/cities-from-state.php
标签: php javascript jquery ajax jquery-ui