0

我正在尝试使用 Ajax 在我的 html 文件(包含 javascript)中实现一个 php 函数。我正在尝试在本地获取所有 JSON 文件的文件。我尽力遵循这个:http ://tinyurl.com/n7zttd9但我遇到了麻烦。出于某种原因,我在警报语句中变得未定义(这是迄今为止我可以得到的最接近打印语句的东西,但如果还有其他选项可以打印,我对它们非常开放)。这是我的本地 html 文件的一些代码:

<script language="javascript" type="text/javascript">
<!-- 
//Browser Support Code

function AjaxCaller(){
    var xmlhttp;
    try{
        // for firefox, safari, opera
        xmlhttp = new XMLHttpRequest();
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(E){
                xmlhttp = false;
                alert("Your browser broke!");
            }
        }
    }

    if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function callPage(url, div){
    ajax=AjaxCaller();
    ajax.open("GET", url, true);

    ajax.onreadystatechange=function(){
        if(ajax.readyState==4){
            if(ajax.status==0){
                div.innerHTML = ajax.responseText;
            }
        }
    }
    ajax.send(null);

}
//-->
</script>

<script id='code-js' type="text/javascript">
/*...*/
function load(){


    var jsonstuff = callPage('findjson.php', document.getElementById('checkjson'));
    alert(jsonstuff);

    Scene.loadObject(jsonstuff);

}
/*...*/
</script>

这是我的php代码(文件是本地的findjson.php)

<?php
function checkjson() {
    foreach (glob("*.json") as $filename) {
        return $filename;
    }
?>

我使用了 0 的 ajax.status 代码,因为我在网上发现它在本地必须为 0。我几乎在每一行都放了警告语句,它似乎可以通过所有代码(就像它的状态为 0 和 readyState 为 4)。我认为我的 document.getElementById 的 ID 是错误的,但我不确定还能放什么。我在我发布的网址中知道他们使用了 targetId,但我认为我不应该使用它,因为我没有定义它。

如果有任何不清楚的地方,请告诉我。非常感谢 :)

4

2 回答 2

0

AJAX 是异步的。alert当您向您展示时,请求不会完成undefined。您需要使用回调函数等到您的请求完成,然后才能访问服务器的响应。

于 2013-06-24T20:50:41.253 回答
0

您的 PHP 代码需要echo的不是数据return。因为该函数是由 AJAX 调用的,而不是另一个 PHP 函数,所以从 PHP 的角度来看,该调用需要被视为页面请求,而不是函数调用。确保在 AJAX 调用该 php 脚本时也调用了该函数。

<?php
function checkjson() {
    foreach (glob("*.json") as $filename) {
        echo $filename;
    }
checkjson();
?>

您的第二个问题是Scene.loadObject(jsonstuff);在 ajax 可以使用响应更改页面之前已经执行。该函数需要在 ajax 请求在以下块内完成后调用:(成功的状态码也是 200,而不是 0。)

if(ajax.status == 200){
   div.innerHTML = ajax.responseText;
}

编辑:使用 jQUery 也会让你的生活更轻松。

于 2013-06-24T20:54:06.087 回答