在web开发中,php与javascript之间的通信是经常需要做的事。下面是一个例子。
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 +')');