Ошибка AJAX: ответ — это html текущей страницы

#php #javascript #jquery #ajax #jquery-ui

#php #javascript #jquery #ajax #jquery-ui

Вопрос:

У меня здесь странная проблема, когда вызов AJAX на сайте, который я разрабатываю, возвращает всю html-разметку любой страницы, на которой я сейчас нахожусь, как вы можете видеть здесь. Эта функция должна просто возвращать почтовый индекс из базы данных для штата и города, которые выбирает пользователь.

Ответ Ajax

Я использую шаблон 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, которую я обслуживаю. Спасибо!