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;
    }
?>

ローカルでは ajax.status コードが 0 でなければならないことがオンラインでわかったため、0 の ajax.status コードを使用しました。ほぼすべての行にアラートステートメントを配置しましたが、すべてのコードを正常に通過したように見えました (ステータスが 0 で、readyState が 4 のように)。document.getElementById の Id が間違っていると思いますが、他に何を入力すればよいかわかりません。私が投稿した URL で、彼らが targetId を使用していたことは知っていますが、私はそれを定義していないので、使用すべきではないと思います。

ご不明な点がございましたらお知らせください。どうもありがとう :)

4

2 に答える 2

0

PHPコードはecho、データではなくデータが必要returnです。この関数は別の PHP 関数ではなく AJAX によって呼び出されているため、この呼び出しは、PHP の観点からは、関数呼び出しではなくページ要求として処理する必要があります。AJAXがそのphpスクリプトを呼び出すときに、何かが関数も呼び出していることを確認してください。

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

2番目の問題はScene.loadObject(jsonstuff);、ajaxが応答でページを変更する前にすでに実行されていることです。この関数は、次のブロック内で ajax リクエストが完了した後に呼び出す必要があります (また、成功のステータス コードは 0 ではなく 200 です)。

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

編集: jQuery を使用すると、作業がずっと楽になります。

于 2013-06-24T20:54:06.087 に答える
0

AJAX は非同期です。が表示された時点では、リクエストは完了してalertいませんundefined。サーバーの応答にアクセスできるようになる前に、コールバック関数を使用して、要求が完了するまで待機する必要があります。

于 2013-06-24T20:50:41.253 に答える