11
回答
php中如何把一个二维数组写成xml或者json格式的,前提是不知道数组元素的个数
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

php开发中,想自己写一个mysql+ajax的省市县三级联动,一切都写好了,就等着返回xml或者json格式的数据了。

查询是:$sql="select * from cities where sid=1";//1为江苏省的id.这个不用多说了

$res=mysql_query($sql);

下面如何处理,用while循环还是怎么弄呢?我要的xml格式类似于

<province><city>南京</city><city>苏州</city></province>

json格式也差不多,只要可以取出即可

PHP
举报
梦碎年代
发帖于5年前 11回/5K+阅
共有11个答案 最后回答: 5年前
<?php 

//$res = mysql_query($sql);
$arr = array(
	'南京','苏州'
);

$str = json_encode($arr);


/**js
var $arr = eval('('+str+')');
$arr[0] // 南京
$arr[1] // 苏州

for(var idx in $arr){
	alert($arr[idx]);
}
**/
?>


//从sql里取出的数据是二维数组啊,而且还得打回去。
//我直接访问php页面
//php:
/*
$sql_shi="select shi from shi where sid=1";
$res_shi=mysql_query($sql_shi);

while($arr=mysql_fetch_array($res_shi)){
	
	$str=json_encode($arr);
	echo $str;
}
*/
//输出:
{"0":"\u627f\u5fb7","shi":"\u627f\u5fb7"}{"0":"\u77f3\u5bb6\u5e84","shi":"\u77f3\u5bb6\u5e84"}
//请问到js页面如何处理

--- 共有 1 条评论 ---
Arrowingjson_encode是针对一个数组的 你应该构造好整体数组,一次性json_encode 5年前 回复
$sql_shi="select shi from shi where sid=1";
$res_shi=mysql_query($sql_shi);
$a = array();
while($arr=mysql_fetch_array($res_shi)){
    $a[] = $arr;
}
echo json_encode($a);

 

谢谢大家的帮助,这可是我第一次发代码。终于可以了,请大家参考,完全做好了
在发一次包括数据库在内的代码以示感谢!!!
php页面:
<?php
//这里两句话很重要,第一讲话告诉浏览器返回的数据是xml格式
header("Content-Type: text/html;charset=utf-8");
//告诉浏览器不要缓存数据
header("Cache-Control: no-cache");
$conn=mysql_connect("localhost","root","123");
mysql_select_db("ajax");
mysql_query("set names utf8");

if(isset($_POST['sid'])){
$sid=$_POST['sid'];
//file_put_contents("D:/a.txt",$sid);
$sql_shi="select shi from shi where sid=$sid";
$res_shi=mysql_query($sql_shi);
$arr="";
while($row=mysql_fetch_array($res_shi)){	
	$arr[]=$row;	
}
$a=json_encode($arr);
echo '{"aa":'.$a.'}';
}
?>
js页面:
<script type="text/javascript">
//创建xmlHttpRequest对象
function GetXmlHttpObject()
{
  var xmlHttp=null;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
  return xmlHttp;
}
	var xhr="";
function checkCity(){
	xhr=GetXmlHttpObject();
	if(xhr){
	var url="/ajax/citiesProcess.php";
	var data="sid="+$("sheng").value;
	xhr.open("post",url,true);
	xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xhr.onreadystatechange=chuli;
	xhr.send(data);
	}
}
function $(id){
	return document.getElementById(id);
}
	
function chuli(){
	if(xhr.readyState==4 && xhr.status==200){
	var result=xhr.responseText;
	//window.alert(result);
	var message=eval("("+result+")");
	$("city").length=0;
		myoption=document.createElement("option");
		myoption.innerText="--市--";
		$("city").appendChild(myoption);
	for(var i=0;i<message.aa.length;i++){
		var shi_name=message.aa[i].shi;
		myoption=document.createElement("option");
		myoption.value=shi_name;
		myoption.innerText=shi_name;
		$("city").appendChild(myoption);
	}
	//window.alert(message.aa[].length);
	}
}
</script>
html页面:
<body>
<select id="sheng" onchange="checkCity();">
    <option value="">---省---</option>
</select>
    <select id="city" onchange="chkxian();">
    <option value="">--市--</option>
    </select>
     <select id="county">
    <option value="">--县--</option>
    </select>
</body>

--- 共有 1 条评论 ---
BENNEEajax好长一段 5年前 回复

第15行注意一下安全问题

这样处理不好·建议一次全部读取数据 封装树 写到文件 然后读文件 

 

引用来自“小Leo”的答案

第15行注意一下安全问题

这样处理不好·建议一次全部读取数据 封装树 写到文件 然后读文件 

 

如何处理呢?
在取得省的信息时,用了onload。但是在我电脑上完全没问题,到别人的电脑上就报一个错。说js页面的56,也就是xhr.open("post",url,true);拒绝访问,是怎么回事呢。。。
顶部