0

我在读取响应的键时遇到问题,然后在出现错误时输出消息。

如果没有错误,我可以输出"Data says: {"msg":"I am BB"}".

但是当我将其更改为 true 时,我似乎无法输出“错误说:{“errmsg”:“Error_BB”}”。问题是我很难阅读密钥。

主文件

<script type="text/javascript">
var xmlhttp;
if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
} else {    
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
}

try
{
    xmlhttp.open("Get", "testBB.php?", true); 
    xmlhttp.send(); 
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {      
            var response = (xmlhttp.responseText);
            console.log('obtained:'+response);

            var keys=[];
            for(var key in response)
                keys.push(key);

            console.log(keys[0].value);

            //var key = Object.getOwnPropertyNames(data);
            //console.log(key);

            if (keys[0].value == "errmsg")// check if msg any errmsg {
                console.log('threw a new error'); 
                throw new Error("Error says: "+response);
            } else {
                console.log('Data says: '+response);
                alert("Data says: "+response);
            }
        }
    }
}

catch(e) {
    alert(e);
}

</script>

测试BB.php

<?php
    try {   
        if(true) {
            throw new Exception("Error_BB",1);
            $firephp->error('Error_BB');
        } else {
            $ans = json_encode(array("msg"=>"I am BB"));    
            echo $ans;
            $firephp->warn($ans);   
        }
    }

    catch(exception $e) {
        echo json_encode(array("errmsg"=>$e->getMessage())); 
    }
?>

请指教

4

1 回答 1

0

我认为您在 PHP 和 JAVASCRIPT 之间混淆了您的语法。

此外,在 javascript 中的 try catch 中,范围也很混乱:您还需要onreadystatechange在调用 .send 之前注册匿名函数,以防在它有机会正确注册如何处理回复之前得到回复。

试试这个测试脚本,然后将更改应用到您的代码。

<html>
<head>
    <script type="text/javascript">
    function doit()
    {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.open("GET", "testBB.php", true);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                try {
                    // convert response back to a json object
                    var response = eval ( "(" + xmlhttp.responseText + ")" );
                    if (response.errmsg == "Error_BB") {
                        throw "Error says: "+response.errmsg;
                    } else {
                        console.log('Data says: '+response.errmsg);
                    }
                }
                catch(e) {
                    alert(e);
                }
            }
        }

        xmlhttp.send();

    }
    </script>
</head>
<body>
    <div>Testing XMLHttpRequest</div>
    <button onclick="doit();" >DoIt</button>
<body>
</html>
于 2013-08-23T11:54:37.183 回答