AJAX XMLHttpRequest';反弹';当向PHP发送vars时


AJAX XMLHttpRequest 'bouncing back' when sending vars to PHP

如果我没有正确表达我的问题,我很抱歉,但我会尽力解决的。我一直在网上寻找可以帮助我解决这个问题的信息,但没有成功。只是一点背景。我是一名经验丰富的网络程序员,尽管在此之前几年没有做过网络工作,但我以前在PHP和javascript方面做过一些工作,现在我使用C++,所以我在编程原理方面相当有经验。

我正在构建一些博客软件,在4wordpress和jQuery中,我根本不在乎。所以请放过它。。。我正在通过一个简单的AJAX请求函数将一些博客条目加载到一个元素中。这个函数的详细信息如下:(它被更改为我在网上发现的一个3函数的例子,当时我正试图调试这个问题,似乎没有人的"简单"代码可以工作。(

该问题在代码下面有详细说明。

var httpObject = null;
function getHTTPObject(){
    if(window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
    else if(window.XMLHttpRequest) return new XMLHttpRequest();
    else {
        alert("Your browser does not support AJAX.");
        return null;
    }
}
function setOutput(){
    if(httpObject.readyState == 4){
        document.getElementById("entries").innerHTML = httpObject.responseText;
    }
}
function loadEntries(s) {
    httpObject = getHTTPObject();
    if (httpObject != null) {
        httpObject.open("GET","entries.php?" + s,true);
        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
    }
}

简单的东西?我似乎看不出有什么错误。这就是函数的调用方式:

        <div id='entries'>
        <script type="text/javascript">
            loadEntries('blog=<?php echo $process['id']; ?>&page=0');
        </script>
    </div>

也很简单。以下是"entry.PHP"的PHP代码:

<?php
    require_once('inc/bloginc.php');
    if(isset($_GET['page'])) {
        $page = intval($_GET['page']);
    } else $page = 0;
    $entries = 3;
    $init = $page * $entries;
    $limit = $entries + $init;
    if(!isset($_GET['blog'])) die("WTF DIE");
    else $blog = mysql_real_escape_string($_GET['blog']);
    $tag = '';
    if(isset($_GET['tag'])) {
        $tag = mysql_real_escape_string($_GET['tag']);
        echo "<span class='blogEntryBody'>viewing entries tagged with: '" . $tag . "' / <a href='' onclick='"";
        echo "loadEntries('blog=" . $blog . "')";
        echo "'">clear?</a></span></br>";
        echo "<hr>";
    }
    $numposts = nResults($blog, $tag);
    buildEntries(getEntries($blog, $tag, $init, $limit));
    if($numposts > $entries) {
        echo "</br><span class='blogEntryBody'>";
        if($page > 0) {
            echo "<a href='' onClick='"";
            echo "loadEntries('blog=" . $blog;
            if(isset($_GET['tag'])) echo "&tag=" . $tag;
            echo "&page=" . (--$page) . "')";
            echo "'">Previous Entries</a>";
            echo " / ";
        }
        echo "<a href='' onClick='"";
        echo "loadEntries('blog=" . $blog;
        if(isset($_GET['tag'])) echo "&tag=" . $tag;
        echo "&page=" . (++$page) . "')";
        echo "'">Next Entries</a>";
        echo "<br></span>";
    }
?>

好吧,现在事情变得棘手了:

将变量发送到"entries.php"时,例如:entries.php?blog=walk&第1页

它们间歇性地工作,其中一些工作,但有些不工作。

我知道这不是PHP代码,因为在一个新窗口中加载entries.PHP并手动传递这些变量会得到所需的结果。发生的情况是,HTTPGET请求在Firefox webdev控制台中返回"undefined",例如:

得到http://localhost/meg/entries.php?blog=walk&tag=lorem〔未定义的2ms〕

^"tag"变量通常起作用,通常是"page"变量将所有内容发送到混乱状态。

实际情况是,在单击"下一页"后,您会很快看到一个空白的div,然后它会很快恢复到以前的状态。您可以在控制台中看到所有这些加载。它将返回"undefined",然后重新加载以前的状态。这实在令人费解。

我不明白为什么会发生这种事。

我希望我已经提供了足够的信息,并以易于理解的格式列出。我不太会问问题。我通常只是"谷歌"或RTM。但我想这一次也许其他人以前也会看到。

哦,我已经用铬测试过了,同样的问题。我真的很困惑,但我有可能忽略了一些微小而关键的东西。

谢谢!

ajax在chrome&explorer,所以我建议使用jquery,因为在jquery中,它们已经包含了explorer和chrome的代码。

你可以使用CCD_ 1方法。