JQUERY json 传值问题
string msg="{ msginfo:[";
msg += "{";
msg += "msgs:'" + "完成"+"',";
msg += "flag:'" + "true" + "',";
msg += "thumb:'" + tpath+"',";
msg += "path:'" + imgpath + "'";
msg += "}";
以下是JSON组织代码,其中thumb和path的值为 一个图片的绝对路径如:C:\xxx\xxx\xxx\dd.img
下面是我的前端解析代码:
$.ajax({
type: "POST",
dateType: "json",
url: "xxxx.aspx",
data: "path=" + path,
success: function (data) {
var jsonData;
jsonData = eval(data);
$.each(jsonData.msginfo, function (idx, item) {
}
}
在解析时 jsonData = eval(data); 这里报错,报错IE 提示是 “SCRIPT1023: 缺少十六进制数字”
请教各位大侠解答。
[最优解释]
下面的代码是亲自测试过的,IE8、Firefox16 完全可用。
你新建一个页面,名称: Default8.aspx
页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default8.aspx.cs" Inherits="Default8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
var path="path"
$.ajax({
type: "POST",
dateType: "json",
url: "Default8.aspx",
data: "path=" + path,
success: function (jsonData) {
jsonData = $.parseJSON(jsonData);
$.each(jsonData.msginfo, function (idx, item) {
alert(this.msgs);
});
}
});
$.getJSON("Default8.aspx","path=" + path,function (jsonData) {
$.each(jsonData.msginfo, function (idx, item) {
alert(this.msgs);
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
页面后置文件:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Default8 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["path"] == "path")
{
string tpath = "http://avatar.profile.csdn.net/B/0/6/1_yw39019724.jpg";
string imgpath = "http://avatar.profile.csdn.net/B/0/6/1_yw39019724.jpg";
string msg = "{ \"msginfo\":[";
msg += "{";
msg += "\"msgs\":\"" + "完成" + "\",";
msg += "\"flag\":\"" + "true" + "\",";
msg += "\"thumb\":\"" + tpath + "\",";
msg += "\"path\":\"" + imgpath + "\"";
msg += "}";
msg += "]}";
Response.Write(msg);
Response.End();
}
}
}
按你的思路,修正了一些你的小错误。
不过, 我前面说的, 你还是得牢记, json格式是严格的, 手工效率低, 而且很易出错。 最好是用工具转。 .net 自带的JavaScriptSerializer或者Newtonsoft.dll 来转吧。
此外,最好是建立 ashx 文件来返回数据。 这样效率比较高。
[其他解释]
那就把路径里面的进行\进行转义 试试。
[其他解释]
你在code里面的格式还是有问题的,冒号前面的字段是要加双引号的,你改成
string msg = "{\"msginfo\":["; msg += "{ \"msgs\":\"完成\",\"flag\":\"true\",\"thumb\":\"" + tpath + "\",\"path\":\"" + imgpath + "\"}"; msg += "]}";
试试看
[其他解释]
该回复于2012-11-27 10:58:34被管理员删除
[其他解释]
alert 一下data,看看哪里格式不对
还有,后台可以使用JavaScriptSerializer类进行序列化。前台可以使用jQuery的ParseJSON方法反序列化。
[其他解释]
eval('('+data+')')
试试
[其他解释]
string msg="{ msginfo:[";
msg += "{";
msg += "msgs:'" + "完成"+"',";
msg += "flag:'" + "true" + "',";
msg += "thumb:'" + tpath+"',";
msg += "path:'" + imgpath + "'";
msg += "}"
是不是少了一个]?
[其他解释]
[]是数组,应该是前面多个一个[
[其他解释]
数据格式是对的,我代码没贴全
[其他解释]
我试过了,原本是这样的
[其他解释]
我alert 过数据是有的
[其他解释]
花括号 没全。。。。。
[其他解释]
IE8?好像不会自动吧字符串解析成对象。用第三方JSON库自己解析把。
[其他解释]
原来eval就是JQuery的解析,还真没有用过。
[其他解释]
如果我的返回对象里面没有 thumb 或者值不是一个路径的话,是能解析的。
[其他解释]
我贴的代码没有写全,其实是全的。
[其他解释]
这个怎么转义呢,我这路径其实也是重其他的地方传过来的。我得到的时候只是一个string
[其他解释]
楼主:你这个不需要再转换了。
$.ajax中 dateType: "json",jquery 会帮你把返回的字符串转json的, 你还搞个eval, 多余了。
[其他解释]
这种情况,最大的可能性就是数据转换成json格式时出了错吧。json的格式,要求是非常严格的,在通常情况下,不应该自己手写转换。
你可以考虑 newtonsoft, 或者.net自带的对象转json字符串。
[其他解释]
我之前没有加eval ,我在使用我返回的数据进行each的时候 提示 [无法获取属性“length”的值]
[其他解释]
你还没有搞明白呀?
问题不是出在前台页面的js上, 是你自己后台拼接json字符串, 这个格式不对。
[其他解释]
我使用了eval进行解析有什么不对么。
[其他解释]
你说我格式不对,我又检查了一遍,个人觉得没什么问题啊
string msg="{ msginfo:[";
msg += "{ msgs:'完成',flag:'true',thumb:'" + tpath + "',path:'"+imgpath+"'}";
msg += "]}";
[其他解释]
不要用eval了
[其他解释]
该怎么处理啊
[其他解释]
IE不会帮忙的
[其他解释]
type : "post",
contentType : "application/json;charset=UTF-8",
dataType : "json",
[其他解释]
有人知道么.
[其他解释]
我找到了错误原因,格式和解析都没有问题。
问题出在我的 路径是一个绝对路劲,在传值的时候没有进行转义,如:"C:\Users\xxx\Desktop\xxx\File\xxx.jpg"
[其他解释]
可以通过Fiddler来查看服务器端返回的是不是json格式,格式对不对。
[其他解释]
请问。楼上的我也遇到了。你是怎么转移的