通过AJAX在Javascript中调用PHP函数的麻烦

时间:2013-06-24 20:48:06

标签: php javascript html ajax

我正在尝试使用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;
    }
?>

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的PHP代码需要echo数据而非return。因为该函数是由AJAX调用的,而不是另一个PHP函数,所以需要从PHP的角度将调用视为页面请求,而不是函数调用。当AJAX调用php脚本时,确保某些东西也调用该函数。

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

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

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

编辑:使用jquery也会让您的生活更轻松。