首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

JQUERY json 传值有关问题

2012-12-14 
JQUERYjson 传值问题string msg{ msginfo:[msg + {msg + msgs: + 完成+,msg + flag:

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格式,格式对不对。
[其他解释]
请问。楼上的我也遇到了。你是怎么转移的

热点排行