请教 JQUERY 如何 接收处理 JSON格式数据

小弟新手,刚学了AJAX,现在想做一个联级菜单,遇到了一些困难,请教一下各位前辈。

首先 Test.php // 这个页面是来处理前面传的数据的

$act=$_POST['act'];
$id=$_POST['id'];
if ($act=='shop') {
$sql=$db->query("select * from tb_dealers where YT_ShopID=$id");
while($row=mysql_fetch_array($sql))
{$select[]=array("ShopName"=>$row["ShopName"]);}
$a= json_encode($select);
echo ($a); }

通过打印测试,得出结论:返回来的数据形式是这样的:
[{"ShopName":"\u7f8e\u8fb0\u7d22\u5e97"},{"ShopName":"\u7f8e\u8fb0Think\u5e97"},{"ShopName":"\u4e1c\u829d"},{"ShopName":"\u534e\u7855"},{"ShopName":"\u6234\u5c14"},{"ShopName":"\u65b9\u6b63"}]
我不是很明白:这个格式是 数组 还是 JSON格式, 为什么后面的中文会显示这样呢?

之前的传输页面:
//为了避免系统里面类库的冲突,JQUERY里面的 符号$换成 jQuery

jQuery(function() {
jQuery('#ddlYTShop').change(function(){
jQuery("#ddlB_ShopName").empty();
jQuery.post("Test.php",{id:jQuery('#ddlYTShop').val(),act:"Shop"},
function(data){
jQuery.each(data, function(index, entry){
var option="<option value='"+entry['ShopName']+"'>"+entry['ShopName']+"</option>";
jQuery("#ddlB_ShopName").append(option);
});
});
});
});
这样写返回来的全部是字符串格式,但是显示的全部是 undefined,
好像是要把传回来的字符串格式转换成对象,但是具体不知道写?
所以请教一下各位前辈。

顺便想请教一下 ajax这两种写法有什么区别呢:
$.ajax({
type:"POST",
url:"Test.php",
data: {id: $('#ddlYTShop').val()},
success:function(data){$('div.a').html(data); }
});

$.post("Test.php",{id:$('#ddlYTShop').val()}, function(data){$('div.a').html(data);})
这两种有区别嘛?
最新回答
没什么大不了

2025-06-17 04:27:30

先解释下ajax ,post
jq里面post的底层就是ajax,
$.post是ajax的type:post方式的简单实现,同理还有$.get
jq本身具有对返回参数格式化的功能,
请把你的post后面加个参数:
jQuery.post("Test.php",{id:jQuery('#ddlYTShop').val(),act:"Shop"},
function(data){
jQuery.each(data, function(index, entry){
var option="<option value='"+entry['ShopName']+"'>"+entry['ShopName']+"</option>";
jQuery("#ddlB_ShopName").append(option);
});
}, 'json');//这里加个json,就可以了,具体说明请看手册

另外你的2个shop大小写不统一,请仔细检查。
追问
你好,谢谢你的帮助,请教一下,换成 $.get或者$.getjson应该怎么写呢?
少年风流曾几时

2025-06-17 02:13:41

":"\u7f8e\u8fb0Think\u5e97"}=>这个中文是经过编码的,你jquery 不用管,自己循环输出就可以了

你如果知道返回的是json,直接用 $.getJSON,给你个例子
$.getJSON(URL+"/getremotexml/?code="+code, function(message){
var msg=message.error;
if(msg!='no'){
$("#result").html(msg);
}else{
var items=message.item;
$.each(items, function(i, good){
var goods=good["@attributes"];
itemg= $.trim(goods.item_code);
}
})

$.post 是$.ajax({ type:"POST", 的简写形式,没啥差别,就是少些代码
月亮供电不足

2025-06-17 03:13:32

这是数组嵌套json,先解析数组,再解析json.很容易的

第一个ajax写法是全标准写法,第二个是基于post方便的写法,第一个可以看成是他的父亲,,可以理解为继承关系。
步信停云

2025-06-17 00:33:22

json_encode()后输出的是标准json格式数据,utf-8编码
一般使用
$.getJSON("test.js", function(json){
alert("JSON Data: " + json.users[3].name);
});
来获取json数据.
ajax这两种写法没多大区别
追问
你好,请问这个是什么意思呢? json.users[3].name
追答
更简单明白的方法: 
success: function(json){
json = eval("(" + json + ")");
alert(json.ShopName);
这样去获取值
追问
我这个系统是要用 循环函数的,	   
function(data){
data=eval('("+data+")');
jQuery.each(data, function(index, entry){
var option=""+entry.ShopName+"";
jQuery("#ddlB_ShopName").append(option);
});
});
里面的opition 是写 entry.ShopName 还是 data.ShopName呢?
追答
循环用法:
var json = {"options":"[{\"text\":\"太仓\",\"value\":\"1\"},{\"text\":\"昆山\",\"value\":\"2\"},{\"text\":\"苏州\",\"value\":\"3\"}]"}
json = eval(json.options)
$.each( json, function (i, o) {
alert("text:" + o.text + ", value:" + o.value);
});
用法2:
for(var i=0;i<json.length;i++)
{
alert(json[i].value);
}
明白了吗
追问
data=eval(data) 这句话在IE中报错,显示有语法错误,怎么回事情呢?
小迷妹

2025-06-17 02:57:43

口服平滑扣屁股付款后来看了会开了很反感,了 价格分开了更加快乐的价格来克服经过艰苦浪费是辅导费的份上但是发大水辅导费撒旦法士大夫撒范德萨发阿道夫飞