读书人

JQUERY json 传值有关问题

发布时间: 2012-12-14 10:33:07 作者: rapoo

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 文件来返回数据。 这样效率比较高。
[其他解释]
引用:
如果我的返回对象里面没有 thumb 或者值不是一个路径的话,是能解析的。

那就把路径里面的进行\进行转义 试试。
[其他解释]
引用:
引用:
引用:引用:引用:引用:引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; ……

你在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 += "}"
是不是少了一个]?
[其他解释]
[]是数组,应该是前面多个一个[
[其他解释]
数据格式是对的,我代码没贴全
[其他解释]

引用:
eval('('+data+')')

试试

我试过了,原本是这样的
[其他解释]
引用:
alert 一下data,看看哪里格式不对

还有,后台可以使用JavaScriptSerializer类进行序列化。前台可以使用jQuery的ParseJSON方法反序列化。

我alert 过数据是有的
[其他解释]
引用:
[]是数组,应该是前面多个一个[

花括号 没全。。。。。
[其他解释]
IE8?好像不会自动吧字符串解析成对象。用第三方JSON库自己解析把。
[其他解释]
引用:
IE8?好像不会自动吧字符串解析成对象。用第三方JSON库自己解析把。


原来eval就是JQuery的解析,还真没有用过。
[其他解释]
如果我的返回对象里面没有 thumb 或者值不是一个路径的话,是能解析的。
[其他解释]
引用:
引用:[]是数组,应该是前面多个一个[
花括号 没全。。。。。

我贴的代码没有写全,其实是全的。
[其他解释]
引用:
引用:如果我的返回对象里面没有 thumb 或者值不是一个路径的话,是能解析的。
那就把路径里面的进行\进行转义 试试。


这个怎么转义呢,我这路径其实也是重其他的地方传过来的。我得到的时候只是一个string
[其他解释]
引用:
C# code?123456789string msg="{ msginfo:["; msg += "{"; msg += "msgs:'" + "完成"+"',"; msg += "flag:'" + "true" + "',"; msg += "thumb:'" + tpath+"',"; ……


楼主:你这个不需要再转换了。
$.ajax中 dateType: "json",jquery 会帮你把返回的字符串转json的, 你还搞个eval, 多余了。


[其他解释]

引用:
引用:引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; msg += "msgs:'" + "完成"+"',"; msg += "flag:'" + "true" + "',"; ……


这种情况,最大的可能性就是数据转换成json格式时出了错吧。json的格式,要求是非常严格的,在通常情况下,不应该自己手写转换。

你可以考虑 newtonsoft, 或者.net自带的对象转json字符串。
[其他解释]
引用:
引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; msg += "msgs:'" + "完成"+"',"; msg += "flag:'" + "true" + "',"; msg += "thu……

我之前没有加eval ,我在使用我返回的数据进行each的时候 提示 [无法获取属性“length”的值]
[其他解释]
引用:
引用:引用:引用:引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; msg += "msgs:'" + "完成"+"',";……


你还没有搞明白呀?

问题不是出在前台页面的js上, 是你自己后台拼接json字符串, 这个格式不对。
[其他解释]
引用:
引用:引用:引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; msg += "msgs:'" + "完成"+"',"; msg += "fl……


我使用了eval进行解析有什么不对么。
[其他解释]
引用:
引用:引用:引用:引用:引用:C# code?123456789string msg="{ msginfo:["; msg += "{"; msg +……


你说我格式不对,我又检查了一遍,个人觉得没什么问题啊

string msg="{ msginfo:[";
msg += "{ msgs:'完成',flag:'true',thumb:'" + tpath + "',path:'"+imgpath+"'}";
msg += "]}";

[其他解释]
不要用eval了
[其他解释]
引用:
引用:$.ajax中 dateType: "json",jquery 会帮你把返回的字符串转json的, 你还搞个eval, 多余了。

IE不会帮忙的

该怎么处理啊
[其他解释]
引用:
$.ajax中 dateType: "json",jquery 会帮你把返回的字符串转json的, 你还搞个eval, 多余了。


IE不会帮忙的
[其他解释]
type : "post",


contentType : "application/json;charset=UTF-8",
dataType : "json",
[其他解释]
有人知道么.
[其他解释]

引用:
下面的代码是亲自测试过的,IE8、Firefox16 完全可用。

你新建一个页面,名称: Default8.aspx
页面:
JavaScript code?1234567891011121314151617181920212223242526272829303132333435363738<%@ Page Language="C#" AutoEventWire……


我找到了错误原因,格式和解析都没有问题。
问题出在我的 路径是一个绝对路劲,在传值的时候没有进行转义,如:"C:\Users\xxx\Desktop\xxx\File\xxx.jpg"
[其他解释]
可以通过Fiddler来查看服务器端返回的是不是json格式,格式对不对。
[其他解释]
请问。楼上的我也遇到了。你是怎么转移的

读书人网 >asp.net

热点推荐