首页新闻找找看学习计划

后台DataTable怎么写才能返回到前台jquery中?

0
[已解决问题] 解决于 2017-03-28 17:18
public ActionResult ExchangeListRefresh(string ExchangeID)
        {
            string strExchangeID = ExchangeID.Substring(0, ExchangeID.Length - 1);
            GTSoft.Web.BusinessService.DataExchangeService pDataExchangeService =
                          new GTSoft.Web.BusinessService.DataExchangeService(_pLoginedInfo);
            DataTable dt = pDataExchangeService.GetExchangeRate(strExchangeID);
            return Json(dt);

        }

后台↑

复制代码
 $.ajax({
                type: "post",
                url: "/HomePage/ExchangeListRefresh",
                async: true,
                data: { ExchangeID: idList },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("获取后台数据出错,请刷新页面后再尝试!");
                },
                success: function (data) {
                    var jsonRete = eval(data);
                    for (var i in jsonRete) {
                        if (jsonRete[i].ExchangeRate == 100)
                        {
                            //表格4显示
                            refresh_exchangeRate.html("完成");
                            //表格5为操作删除,完成时变成灰色,不可点击
                            refresh_delete.html("<a><i class='fa fa-trash-o ' style='color:#888;' ></i></a>");
                        }
                        else {
                            refresh_exchangeRate.html(jsonRete[i].ExchangeRate);
                        }
                    }
                }
            });
复制代码

前台↑

dt中是只有一个字段ExchangeRate的数据,有三个值{100,100,80}。

我要怎么样让他传到前台,然后前台接收之后遍历出来,

我现在写得return Json(dt);会报错,说“获取后台数据出错,请刷新页面后再尝试!”

我这后台和前台应该怎么处理啊?

你猜丶的主页 你猜丶 | 菜鸟二级 | 园豆:390
提问于:2017-03-23 16:34
< >
分享
最佳答案
0

既然在mvc中给的返回类型时return Json那么你应该想到将数据以集合形式放回,而不是dataTable!
你试试传递参数这样处理:data: { ExchangeID: idList },修改为data:Json.Stringfy(idList)

奖励园豆:5
Jeffcky | 老鸟四级 |园豆:2544 | 2017-03-24 00:26

这样的话,那后台这个ExchangeID能直接获取到值吗?

public ActionResult ExchangeListRefresh(string ExchangeID) { }

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 09:16

@你猜丶: 可以,你试试!

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 09:42

@Jeffcky: 不行耶,他说Json未定义

  $.ajax({
                type: "post",
                url: "/HomePage/ExchangeListRefresh",
                async: true,
                data:Json.Stringfy(idList),
                success: function (data) {
                }
            });
你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 09:46

@你猜丶: 我就稍微写了下,大小写肯定是有问题的,是这个:JSON.stringify(...)

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:28

@Jeffcky: 那我接下来这里应该怎么处理可以把他遍历出来?

 success: function (data) {               
                 var jsonRete = eval(data);
                    //alert(jsonRete);
                    for (var i in jsonRete) {
                        if (jsonRete[i-1] == 100)
                        {
                            //进度列显示
                            refresh_exchangeRate.html("完成");
                            //操作列显示
                            refresh_delete.html("<a><i class='fa fa-trash-o ' style='color:#888;' ></i></a>");
                        }
                        else {
                            //进度列显示
                            refresh_exchangeRate.html(jsonRete[i]);
                        }
                    }
                }

 

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:30

@Jeffcky: 接受不到,快哭了,太难了。

 $.ajax({
                type: "post",
                url: "/HomePage/ExchangeListRefresh",
                async: true,
                data: JSON.stringify(idList) ,
})

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:33

@你猜丶: 首先你要确定你发送的请求路由正确与否,然后再看你参数传递的问题

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:35

@Jeffcky: 不对不对,我发现我们纠结的问题不对,我之前data: { ExchangeID: idList }是可以确定的传递数据过去的,包括DataTable dt都是正常查出数据的,我现在要的就是将dt中查出的一个字段数据返回到ajax中,在其中遍历输出出来

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:38

@你猜丶: 还要设置dataType:"json"和contentType:"application/json" 你得告诉http协议我发送的是json数据还是文本数据还是其他

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:38

@你猜丶: return Json返回数据前台获取解析不就ok了吗

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:40

@Jeffcky: 我就是不知道怎么用return Json如何返回dt中的数据,然后在前台如何解析

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:41

@你猜丶: return json(dt)不就ok了么??

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:44

@Jeffcky: dt中是一个字段的数据,但我经理说dt中只有一个字段就不要用tring strSearchResultString = GTSoft.Web.Common.JsonConvertFunction.ToJson(dt);直接返回,然后我就不知道怎么写了,对了之前我用的这种方法是抄的,所以我会,但实际上没有抄,我就一点都不会

后台↓

public JsonResult ExchangeListRefresh(string ExchangeID)
        {
            //接收值
            string strExchangeID = GTSoft.Web.Common.CommonFunction.GetString(ExchangeID);
            //去掉结尾的,
            strExchangeID = ExchangeID.Substring(0, ExchangeID.Length - 1);
            //连接数据
            GTSoft.Web.BusinessService.DataExchangeService pDataExchangeService =
                          new GTSoft.Web.BusinessService.DataExchangeService(_pLoginedInfo);
            //查询数据
            DataTable dt = pDataExchangeService.GetExchangeRate(strExchangeID);
            string strSearchResultString = GTSoft.Web.Common.JsonConvertFunction.ToJson(dt);
            //返回值
            return Json(strSearchResultString);
}

前台↓

 success: function (data) {               
                 var jsonRete = eval(data);
                    //alert(jsonRete);
                    for (var i in jsonRete) {
                        if (jsonRete[i-1] == 100)
                        {
                            //进度列显示
                            refresh_exchangeRate.html("完成");
                            //操作列显示
                            refresh_delete.html("<a><i class='fa fa-trash-o ' style='color:#888;' ></i></a>");
                        }
                        else {
                            //进度列显示
                            refresh_exchangeRate.html(jsonRete[i]);
                        }
                    }
你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:45

@Jeffcky:这样吗?

        public JsonResult ExchangeListRefresh(string ExchangeID)
        {
            //接收值
            string strExchangeID = GTSoft.Web.Common.CommonFunction.GetString(ExchangeID);
            //去掉结尾的,
            strExchangeID = ExchangeID.Substring(0, ExchangeID.Length - 1);
            //连接数据
            GTSoft.Web.BusinessService.DataExchangeService pDataExchangeService =
                          new GTSoft.Web.BusinessService.DataExchangeService(_pLoginedInfo);
            //查询数据
            DataTable dt = pDataExchangeService.GetExchangeRate(strExchangeID);//返回值
            return Json(dt);

        }
你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:47

@你猜丶: 既然只有一个字段,那就利用dt.Rows[0][0]直接取到这个值嘛,就不用return Json(dt)了呀

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:50

@Jeffcky: 有用吗?这个字段是这样的耶,里面有5条数据的

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:53

@你猜丶: 你遍历啊然后存在一个数组里面

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 10:58

@Jeffcky: 额额,后台就遍历,然后存到数组里面啊?

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 10:59

@你猜丶: 是的 ,存数组、集合都可以

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 11:00

@Jeffcky: 这样吗?那我前台应该怎么遍历出这个数组呢?我这个代码不太会.( ╯□╰ )

后台↓

        public JsonResult ExchangeListRefresh(string ExchangeID)
        {
            //接收值
            string strExchangeID = GTSoft.Web.Common.CommonFunction.GetString(ExchangeID);
            //去掉结尾的,
            strExchangeID = ExchangeID.Substring(0, ExchangeID.Length - 1);
            //连接数据
            GTSoft.Web.BusinessService.DataExchangeService pDataExchangeService =
                          new GTSoft.Web.BusinessService.DataExchangeService(_pLoginedInfo);
            //查询数据
            DataTable dt = pDataExchangeService.GetExchangeRate(strExchangeID);
//存入数组中
string[] PExchangeRate = new string[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i]; PExchangeRate[i] = (dr["ExchangeRate"]).ToString(); }
//返回
return Json(PExchangeRate); }

前台↓

 success: function (data) {             
                    //这里我应该怎么处理输出那个数组的值呢?      
                    var jsonRete = eval(data);
                    //遍历出来
                    for (var i in jsonRete) {
                        if (jsonRete[i] == 100)
                        {
                            //进度列显示
                            refresh_exchangeRate.html("完成");
                        }
                        else {
                            refresh_exchangeRate.html(jsonRete[i].ExchangeRate);
                        }
                    }
                }
你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 11:30

@你猜丶: 那就用jquery中的$.each遍历。

Jeffcky | 园豆:2544 (老鸟四级) | 2017-03-24 11:52

@Jeffcky: 哭,我告诉自己要坚强,我不会敲代码啊,我不知道前台怎么接收返回的值

你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 13:35

@Jeffcky: 兄弟,我这个已经成功做出来了,得到值了,谢谢

 success: function (JSON) {               
                    $.each(JSON, function (index, obj) {
                        alert(obj);
                        if(obj == "100")
                        {
                            //进度列显示
                            refresh_exchangeRate.html("完成");
                            //操作列显示
                            refresh_delete.html("<a><i class='fa fa-trash-o ' style='color:#888;' ></i></a>");
                        }
                        else
                        {
                            //进度列显示        
                            refresh_exchangeRate.html(obj);
                        }
                    }); 
                }
你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-24 14:23
其他回答(3)
0

   alert("获取后台数据出错,请刷新页面后再尝试!");换成alert(XMLHttpRequest.responseText),就知道具体报什么错误了。

happydaily | 园豆:581 (小虾三级) | 2017-03-23 17:30

得到了这个

支持(0) 反对(0) 你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-23 17:33

@你猜丶: 说明数据已经返回了,修改代码如下:

async: true,dataType:'json'

支持(0) 反对(0) happydaily | 园豆:581 (小虾三级) | 2017-03-24 09:03
0

1.别再用datatable了.

2.在浏览器上的网络监视里看报文格式.你那个object说明已经取道了.

3.在success: function (data)里打断点.然后慢慢调试data的值

吴瑞祥 | 园豆:28675 (高人七级) | 2017-03-23 17:55

这样直接返回dt没错吗?

支持(0) 反对(0) 你猜丶 | 园豆:390 (菜鸟二级) | 2017-03-23 17:59

@你猜丶: 你不是已经json序列化了吗.

你把2-3条做了,才能知道怼不怼

支持(0) 反对(0) 吴瑞祥 | 园豆:28675 (高人七级) | 2017-03-23 18:02
0

在ajax 加个datatype=‘json’试试

顺便看看网络请求中 报什么错误

DNLi | 园豆:343 (菜鸟二级) | 2017-03-23 19:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册