javascript端:
一定要设置xmlhttp.setrequestheader,否则传往php的参数会变成null(line 43)。第36行是亮点。
<script type="text/javascript"> function getjson() { var xmlhttp; try { // firefox, opera 8.0+, safari xmlhttp = new xmlhttprequest(); } catch (e) { // internet explorer try { xmlhttp = new activexobject("msxml2.xmlhttp"); } catch (e) { try { xmlhttp = new activexobject("microsoft.xmlhttp"); } catch (e) { alert("您的浏览器不支持ajax!"); return false; } } } xmlhttp.onreadystatechange = function() { if (xmlhttp.readystate == 4) { //alert(xmlhttp.responsetext); var str = xmlhttp.responsetext; document.getelementbyid('show').innerhtml +=str; //alert(str); var obj = eval('('+ xmlhttp.responsetext +')'); //var obj = eval(({"id":"123","name":"elar","age":"21"})); alert(obj.name); } } var data = "id=123"; xmlhttp.open("post", "testjson.php", true); xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded"); xmlhttp.send("id=123"); } </script> <input type="button" onclick="getjson()" value="按我!"/> <hr /> <div id="show"></div>
php端【testjson.php】:
注意,php文件要干净,<?php ?>标签的外部不能有其他标签,否则eval函数无法解析。
<?php $res['id'] = $_post['id']; $res['name'] = "elar"; $res['age'] = "21"; $response = "hello this is response".$_post['id']; echo json_encode($res); ?>
总结:
js要往php端送数据,用的是xmlhttp.send(id=123);
php给js送数据,用的是echo json_encode($res);(要注意变量$res的构造应符合json的规范)
js要解析php送来的json格式的数据,用var obj = eval('('+ xmlhttp.responsetext +')');