AJAX错误:响应是当前页面的HTML

时间:2011-10-05 16:14:29

标签: php javascript jquery ajax jquery-ui

我在这里遇到一个奇怪的问题,我正在开发的网站上的AJAX调用正在返回我当前所在的任何页面的所有html标记,如此处所示。此函数应该仅从数据库返回用户选择的州和城市的邮政编码。

Ajax response

我在这个网站上使用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有关。我在想这里有一个我失踪的相关性。

1 个答案:

答案 0 :(得分:0)

@Diodeus就是这样。我在模拟这个新站点的同时编写了我的所有javaScript,但我最近编写了导航结构,显然这个.htaccess规则(RewriteRule ^(.*).php template.php?page=$1 [NC])正在将我的AJAX请求重定向到我服务的404页面。谢谢!