Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过AJAX在Javascript中调用PHP函数时遇到问题_Php_Javascript_Html_Ajax - Fatal编程技术网

通过AJAX在Javascript中调用PHP函数时遇到问题

通过AJAX在Javascript中调用PHP函数时遇到问题,php,javascript,html,ajax,Php,Javascript,Html,Ajax,我正在尝试使用Ajax在我的html文件(包含javascript)中实现一个php函数。我试图在本地获取所有JSON文件。我尽力做到这一点:但我遇到了麻烦。出于某种原因,我的alert语句中没有定义(这是迄今为止我能得到的最接近于print语句的东西,但是如果有其他选项可以打印,我会非常开放)。以下是我的本地html文件的一些代码: <script language="javascript" type="text/javascript"> <!-- //Browser Su

我正在尝试使用Ajax在我的html文件(包含javascript)中实现一个php函数。我试图在本地获取所有JSON文件。我尽力做到这一点:但我遇到了麻烦。出于某种原因,我的alert语句中没有定义(这是迄今为止我能得到的最接近于print语句的东西,但是如果有其他选项可以打印,我会非常开放)。以下是我的本地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>

/*...*/
函数加载(){
var jsonstaff=callPage('findjson.php',document.getElementById('checkjson');
警报(JSONSTAFF);
加载对象(jsonstaff);
}
/*...*/
这是我的php代码(本地文件为findjson.php)


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


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

AJAX是异步的。当
警报显示
未定义时,请求将不会完成。您需要使用回调函数等待请求完成,然后才能访问服务器的响应。

您的PHP代码需要
回送
数据,而不是
返回它。由于该函数是由AJAX调用的,而不是由另一个PHP函数调用的,因此需要从PHP的角度将该调用视为页面请求,而不是函数调用。确保在AJAX调用该php脚本时也有东西在调用该函数

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

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

它必须是
echo
,而不是
return
,因为这个网站上还有无数其他的重复:AJAX是异步的。xmlhttp将执行,然后立即返回并允许执行警报。在稍后的某个时刻,来自服务器的响应会出现,此时您的代码已经开始运行,并且正在停止执行其他操作。您的PHP代码在语法上也应该是正确的。AJAX调用本身并不调用PHP函数,它只能请求页面但正如前面所说的,您应该首先使用编写良好的AJAX实用程序代码(jQuery),而不是像复制和粘贴一样繁琐。@Musa这是发布的代码OP中的响应处理程序块。感谢您的捕获,完全错过了这一点。
<?php
function checkjson() {
    foreach (glob("*.json") as $filename) {
        echo $filename;
    }
checkjson();
?>
if(ajax.status == 200){
   div.innerHTML = ajax.responseText;
}