iT邦幫忙

0

C# 後端傳回AJAX值問題請教

您好:
1.我於前端

$.ajax({
                type: "POST",
                url: '......',  //
                data: "mode=method&method=" + "do" + "&parameters=" + dataArr,
                cache: false, async: false,
                success: function (data) {
                   
                    let sn = data[1];
                    let x = data[0];
                    let s = data[2];
                    let e = data[3];
					
                    result = data; //這邊回傳字串

                }
            });

2.C#後端

public object do(object[] objParam) {  //檢查MASTER 是否重覆
           
		   .....

            object ret;
            ret = new object[] { 0, r_sn, r_date_s, r_date_e };
           

            return ret;
        }

3.前端AJAX
success: function (data){

}

alert(data);
卻只是 C# 後端 r_sn 的值? 其他的值 回傳不了??

4.一般C#後端可否回傳 陣列 給前端?
謝謝!

1
japhenchen
iT邦大師 1 級 ‧ 2020-09-14 15:02:56
最佳解答

前端改寫成

$.ajax({
                type: "POST",
                url: '......',  //
                data: {
                        mode:method,
                        method:"do",
                        parameters:dataArr.join(',')
                      },
                cache: false, async: false,
                success: function (data) {
                   
                    let sn = data[1];
                    let x = data[0];
                    let s = data[2];
                    let e = data[3];
					
                    result = data; //這邊回傳字串

                }
            });

後端取值

    var params = Request.Form["parameters"].ToString().Split(new char[] { ',' });
    do(params);
看更多先前的回應...收起先前的回應...

後端回傳陣列給前端真TMD簡單,不過你最好去Nuget下載Newtonsoft的JSON庫

後端

protected void Page_Load(object sender, EventArgs e)
{
    if( Request.Form["action"]=="do"){
        string[] arr = { "aaa", "bbbb","CCCC"};
        Response.Write(JsonConvert.SerializeObject(arr));
        Response.End();
    }
}

前端

$.post({
    url:"..........",
    dataType:"json",
    data:{
            action : "do",
            params : arr.join(',')
        }
    })
    .Done(function(data){
        data.forEach(function(item){
            console.log(item);
        })
    });
noway iT邦新手 5 級 ‧ 2020-09-14 21:25:31 檢舉

您好:
謝謝,請問
object ret;
ret = new object[] { 0, r_sn, r_date_s, r_date_e };
為何回傳 只有一個欄位; 這跟AJAX前面設定有關嗎?
謝謝!

因為你前端只有送一組資料
data: "mode=method&method=do&parameters=" + dataArr
這非pairvalue,所以我才改寫成

data: {
        mode:'method',
        method:'do',
        parameters:dataArr.join(',')            
    }

這樣後端的C#才看的懂你post過來的東西是如何組成的

var mode = Request.Form['mode'].ToString() ; # 'method'
var method = Request.Form['method'].ToString() # 'do'
var params = Request.Form['mode'].ToString().Split(new char[] { ',' });
do(params);
noway iT邦新手 5 級 ‧ 2020-09-15 08:38:05 檢舉

不好意思,我沒說清楚。
我是說,C# 後端,回傳
object ret;
ret = new object[] { 0, r_sn, r_date_s, r_date_e };

前端為何只有取得到 r_sn 這一個值,其他都無法取得?
謝謝!

你如何回送這個 object ret ?

我第二個例子裡就有提到用JsonConvert.SerializaObject的方法,把後端的(具名)陣列送到前端的方法啊~~~~~~

我慣用NewtonSoft.Json的理由是.......中文不會被拆成unicode看起來亂亂的

string[] arr = { "aaa", "bbbb","CCCC"};
Response.Write(JsonConvert.SerializeObject(arr));
Response.End();
noway iT邦新手 5 級 ‧ 2020-09-15 20:31:15 檢舉

您好:就是很困惑,JsonConvert.SerializeObject(arr) 回傳string。

但我 object ret;
ret = new object[] { 0, r_sn, r_date_s, r_date_e };

回傳 result = data;
他也的確可以 只取到 r_sn

後端送到前端的資型式很有限且單一,字串、文字檔、二進位檔,如果把問題縮小到前端處理資料的不是應用程式而是javascript,那只有字串有辦法處理(除非掛接其他瀏覽器擴展元件),所以json才會大行其道,至少javascript自己看的懂且有辦法把json轉換成變數、陣列、字典(dictionary)

1
暐翰
iT邦大師 1 級 ‧ 2020-09-14 14:12:33

卻只是 C# 後端 r_sn 的值? 其他的值 回傳不了??

請使用 Json.NET 套件轉成 JsonResult 回傳前端

一般C#後端可否回傳 陣列 給前端?

可以,後端回傳 Json Array , 前端再用 JSON.parse() 轉為 JS Array Object

最後,建議題主需要系統性建立後端 API + 前端 JSON 資料溝通概念,請看這篇文章 Get Started with ASP.NET Web API 2 (C#) | Microsoft Docs

1
小魚
iT邦大師 1 級 ‧ 2020-09-14 15:55:27

比較常見的方法是傳Json字串回到前端,
前端再針對Json字串處理.
話說我前幾年的鐵人賽文章好像有寫
ASP.NET MVC網頁程式介紹
從第20天開始.

我要發表回答

立即登入回答