#php #javascript #jquery #ajax #jquery-ui
#php #javascript #jquery #ajax #jquery-ui
Вопрос:
У меня здесь странная проблема, когда вызов AJAX на сайте, который я разрабатываю, возвращает всю html-разметку любой страницы, на которой я сейчас нахожусь, как вы можете видеть здесь. Эта функция должна просто возвращать почтовый индекс из базы данных для штата и города, которые выбирает пользователь.
Я использую шаблон HTML5 от Paul Irish и Modernizr на этом сайте, чтобы упростить разработку кросс-браузерной совместимости. Хотя я использовал их раньше без проблем, я начинаю думать, что у меня какой-то конфликт JavaScript с одним из сценариев, которые использует шаблон HTML5.
Вот 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 'amp;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 amp;amp; 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-й раз при обновлении), что я получаю случайные ошибки JavaScript, связанные с jQuery, связанные с jQueryUI datepicker, который я использую. Я думаю, что здесь есть корреляция, которую я упускаю.
Комментарии:
1. Запишите вызываемый URL-адрес и введите его в адресную строку вашего браузера и посмотрите, что вы получите. Кстати: если вы используете jQuery, почему вы используете XMLHttpRequest вместо AJAX-хэндера jQuery?
2. Все еще новичок в AJAX … -> Я знаю, что jQuery обладает обширной функциональностью AJAX, но я всегда стараюсь понять базовую технологию, лежащую в основе моего кода, прежде чем использовать библиотеку или сокращение, чтобы упростить его.
3. я предполагаю, что ответ скрывается здесь —
x.open("POST", "inc/ajax/cities-from-state.php", true);
попробуйте вызвать это «/inc/ajax/cities-from-state.php «, если ваша страница похожа на yourserver.com и cities-from-state.php находится в yourserver.com/inc/ajax/cities-from-state.php
Ответ №1:
@Diodeus вот что это такое. Сначала я закодировал весь свой JavaScript при создании шаблона этого нового сайта, но я только недавно закодировал структуру навигации, и, по-видимому, это правило .htaccess ( RewriteRule ^(.*).php template.php?page=$1 [NC]
) перенаправляет мой запрос AJAX на страницу 404, которую я обслуживаю. Спасибо!