0

私は少し立ち往生しています.fillを呼び出してJSON.parseで結果を返す2つの関数があります. しかし、結果を console.log にすると、「未定義」になります。

これは、リクエストを処理する私の関数です:

function caller(url,cfunc){
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
                xmlhttp.onreadystatechange=cfunc;
                xmlhttp.open("GET",url,true);
                xmlhttp.send();
}
function call_data(url,data){
    caller(url,function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            return( JSON.parse (xmlhttp.responseText) );
        }
    });                                           
}   

呼び出しは次のとおりです。

result = call_data('./chk_login.php',0);
console.log(result);

Chrome imによると、xhrリクエストは完全に問題なく取得され、出力が表示されます。しかし、console.log には undefined と表示されます... これが私の PHP スクリプトでもあることがわかります。

<?
    $var = 1;
    echo json_encode($var);
    exit;
?>

問題の原因は何ですか?

あなたが助けてくれることを願っています! ありがとう!

4

1 に答える 1

2

これは非同期であるため (結局のところ、AJAX の A はこれを表しています)、単にreturn値を取得して、それが魔法のように返されることを期待することはできません。代わりに、コールバック内でデータを操作してください (すでに 80% の処理が完了しています)。

function call_data(url,data){
    caller(url,function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            console.log( JSON.parse (xmlhttp.responseText) );
            ajaxResult = JSON.parse (xmlhttp.responseText);
        }
    });
}

var ajaxResult;
于 2012-11-18T04:12:34.670 に答える