将vars发送给PHP时,AJAX XMLHttpRequest'反弹'

时间:2011-10-10 03:53:45

标签: php javascript ajax

如果我没有正确表达我的问题,我道歉,但我会尽我所能。我一直在网上寻找可以帮助我解决这个问题的信息,但无济于事。 只是一点背景。我是一名经验丰富的网络编码员,虽然在此之前的几年内还没有做过网络工作,但我以前在PHP和javascript方面做了很多工作,而且这些天我使用C ++,所以我很有经验编程原则。

我正在构建一些博客软件,以及inb4wordpress和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>

也很简单。 这是'entries.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>";
    }

?>
好的,现在这里的事情变得棘手:

将vars发送到'entries.php'时,例如:entries.php?blog = walk&amp; page = 1

他们间歇性地工作,其中一些工作,但有些人没有。

我知道这不是PHP代码,因为在新窗口中加载entries.php并手动传递这些变量会引发所需的结果。会发生什么是HTTP GET请求在Firefox webdev控制台中返回'undefined',例如:

  

[14:47:33.505] GET http://localhost/meg/entries.php?blog=walk&tag=lorem [undefined 2ms]

^'tag'变量通常有效,它通常是'page'变量,可以发送所有乱码。

在点击“下一页”后,您会快速看到一个空白div,然后它会快速反弹回到之前的状态。您在控制台中看到所有这些加载。它将返回'undefined'然后重新加载以前的状态。这简直令人费解。

我不明白为什么会这样。

我希望我提供了足够的信息,并以易于理解的格式进行设置。我很想问问题。我通常只是'googleit'或RTM。但我想也许这个时候别人会看到这个。

哦,我在chrome中测试了同样的问题。我真的很困惑,但我可能会忽略一些小而重要的东西。

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,有几次ajax在chrome&amp; explorer所以我建议使用jquery,因为在jquery中他们已经包含了explorer和chrome的代码。

你可以用 <{1}}方法很容易。