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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教 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);)
这两种有区别嘛?

先解释下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应该怎么写呢?

参考技术A ":"\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", 的简写形式,没啥差别,就是少些代码
参考技术B 这是数组嵌套json,先解析数组,再解析json.很容易的

第一个ajax写法是全标准写法,第二个是基于post方便的写法,第一个可以看成是他的父亲,,可以理解为继承关系。
参考技术C 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中报错,显示有语法错误,怎么回事情呢?

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

.net mvc服务端怎么接收客户端的发送的json数据?

在web程序开发中,前端和服务器数据的传输方式常用的有两种,一种是以表单的形式提交,此时可以利用jquery的serialize()方法将表单内容转为a=1&b=2&c=3&d=4&e=5这样的格式传输过去,接收端则可以用javabean直接接收。
还有一种方式是以json格式传输,接收时若直接用bean接收则接收不到,此时应该用@RequestBody方式,需要注意的是接收的需要是json串,而不是json对象,可以在发送前使用JSON.stringify函数进行处理。
例子如下
客户端:
var url=path+'testConverter.html';
$.ajax(
url : url,
type : "POST",
dataType:"json",
contentType:'application/json;charset=UTF-8',
data:JSON.stringify(userId:'1',userName:'hello',password:'test',credits:'2',lastIp:'',lastVisit:'1986-05-27'),
success : function(data)
alert(data.userName);

,
error:function(e)
alert("err");


服务端:
@RequestMapping(value="/testConverter.html")
@ResponseBody
public User testConverter(@RequestBody User user)

System.out.println(user.getUserName());
user.setUserName("testname");
return user;


上面例子中服务端返回的是个对象,@ResponseBody函数会自动将其转换为客户端要求的‘ dataType:"json",’格式。

最后需要注意的是
1,在xxx-serverlet配置文件中应该写上,以便可以使用 @ResponseBody和@RequestBody
2,发送时要写上 contentType:'application/json'
3,数组内容要用[]而不是list,用list会接收到一个map对象,而不是bean。
参考技术A 拼接啊;
string json = "newstitle:'" + dt.Rows[0][1].ToString() + "',newscontent:'" + dt.Rows[0][2].ToString() + "',userid:'" + dt.Rows[0][3].ToString() + "',ntime:'" + dt.Rows[0][4].ToString() + "'";
参考技术B 这个很简单,mvc3 已经有对json的绑定了。给你看个文章,你就知道了。
http://blog.csdn.net/qq4267002/article/details/6914643 希望我的回答会给您带来帮助。

以上是关于请教 JQUERY 如何 接收处理 JSON格式数据的主要内容,如果未能解决你的问题,请参考以下文章

jsp页面中,如何使用jquery拼接json格式的数据

如何在Django中接收JSON格式的数据

请教jsonJSON.parse中双引号如何解决

如何使用jquery取出json格式的数据

.net mvc服务端怎么接收客户端的发送的json数据?

web环境下,servlet如何设计java接口接收json,并将处理结果按json格式返回?