Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как передать js массив с клиента на сервер с помощью Query? / 20 сообщений из 20, страница 1 из 1
26.02.2010, 14:35
    #36490230
V ad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Добрый день.

Помогите решить такую задачу:

Собираю на клиенте массив обьектов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var ResultArray = new Array();
...

for (i = 0; i < count; i++) 
{
     ...
     var RowValue = { id: current_Id, value: current_Value };
     ResultArray.push(RowValue);
}

Затем передаю его на сервер:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    $.post(
        "Home/GetResult",
        { result: ResultArray },
        null,
        "json"
    );


Перед передачей на сервер я вижу массив и все что внем лежит

На сервере я принимаю этот массив (2-мя способами), но обьекты в нем не видны
Ответ получается типа : "[object Object],[object Object],[object Object]"

Код: plaintext
1.
2.
3.
4.
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult GetResult(object[] result)
        {            
            object new_result = Request.Form["result"];

Подскажите, что нужно сделать, чтоб распознать обьекты в массиве?
...
Рейтинг: 0 / 0
26.02.2010, 14:48
    #36490277
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
как вариант, наколбасить объект
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var ResultOb = {count:count};
...

for (i = 0; i < count; i++) 
{
   ...
   ResultOb['id'+i] = current_Id;
   ResultOb['v'+i] = current_Value;
}



$.post(
        "Home/GetResult",
        ResultOb,
        null,
        "json"
    );


На сервере смотреть Request.Form["count"] (число объектов)
и значения Request.Form["id0"], Request.Form["v0"], Request.Form["id1"], ...
...
Рейтинг: 0 / 0
26.02.2010, 15:30
    #36490399
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Как вариант: PageMethods + JSON

К примеру, отправляется двумерный массив с клиента:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var args = new Array();

for (i = 0; i < ...; i++)
{                            
    args[j] = new Array (1);
    
    args[j][0] = ...
    args[j][1] = ...
}

...

PageMethods.GetStringValue(args, OnSucceeded, OnFailed); 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[WebMethod]
public static void GetStringValue(object value)
{
    if (value != null)
    {
        var values = new JavaScriptSerializer().ConvertToType<Dictionary<object, Dictionary<string, string>>>(value);
        if (values != null)
        {
            var query = values.Select(d => new PickerView(d.Value["0"], d.Value["1"])).ToList();
            ...
        }
    }
}

PickerView
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[Serializable]
public class PickerView
{
    public PickerView(string key, string value)
    {
        Key = key;
        Value = value;
    }

    public string Key { get; set; }
    public string Value { get; set; }
}
...
Рейтинг: 0 / 0
26.02.2010, 16:26
    #36490525
V ad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Яростный Мечкак вариант, наколбасить объект
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var ResultOb = {count:count};
...

for (i = 0; i < count; i++) 
{
   ...
   ResultOb['id'+i] = current_Id;
   ResultOb['v'+i] = current_Value;
}



$.post(
        "Home/GetResult",
        ResultOb,
        null,
        "json"
    );


На сервере смотреть Request.Form["count"] (число объектов)
и значения Request.Form["id0"], Request.Form["v0"], Request.Form["id1"], ...

Яростный Меч, спасибо, ваш вариант сработал, но получается что мне возвращается только коллекция некоторых значений, но их может быть несколько тысяч.

Я знаю только вариант передачи такого массива в виде строки с помощью JSON.stringify:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    $.post(
        "Home/GetResult",
        { result: JSON.stringify(ResultArray) },
        null,
        "json"
    );


А не знаете как можно было бы передать обьект - как массив обьектов, а потом распознать каждый обьект на сервере?
...
Рейтинг: 0 / 0
26.02.2010, 17:39
    #36490728
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Код: plaintext
1.
2.
3.
4.
5.
Public Class Customer
    Public Name As String
    Public SoureName As String
    Public Age As Int16
End Class
Код: plaintext
1.
2.
3.
4.
5.
6.
function addPeople() {    
            var val = [];
            var o = {Name: "User", SoureName: "SourName", Age: 150}
            val.push(o);                    
            $.post("/Home/addPeople", { data: $.toJSON(val) }, null, "json");
        }
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Imports Newtonsoft.Json

Public Class JsonFilter
    Inherits ActionFilterAttribute

    Private _JsonDataType As Type
    Public Property JsonDataType() As Type
        Get
            Return _JsonDataType
        End Get
        Set(ByVal value As Type)
            _JsonDataType = value
        End Set
    End Property

    Private _Param As String
    Public Property Param() As String
        Get
            Return _Param
        End Get
        Set(ByVal value As String)
            _Param = value
        End Set
    End Property

    Public Overrides Sub OnActionExecuting(ByVal filterContext As System.Web.Mvc.ActionExecutingContext)

        Dim inputContent As String = HttpUtility.UrlDecode(filterContext.HttpContext.Request.Params(_Param))
        filterContext.ActionParameters(_Param) = Newtonsoft.Json.JsonConvert.DeserializeObject(inputContent, GetType(Customer()))

    End Sub

End Class
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 <JsonFilter(Param:="data", JsonDataType:=GetType(Customer()))> _
    <AcceptVerbs(HttpVerbs.Post)> _
    Public Function addPeople(ByVal data() As Customer) As JsonResult

        Return Nothing

    End Function
Newtonsoft.Json
jquery.toJSON.js

Успехов!
...
Рейтинг: 0 / 0
26.02.2010, 22:01
    #36491209
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Код: plaintext
1.
2.
3.
4.
5.
6.
Public Overrides Sub OnActionExecuting(ByVal filterContext As System.Web.Mvc.ActionExecutingContext)

        Dim inputContent As String = HttpUtility.UrlDecode(filterContext.HttpContext.Request.Params(_Param))
        filterContext.ActionParameters(_Param) = Newtonsoft.Json.JsonConvert.DeserializeObject(inputContent, _JsonDataType)

End Sub
конечно! ;)
...
Рейтинг: 0 / 0
26.02.2010, 22:15
    #36491221
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Бох ты мой! Чтобы парсить json нужна эта дурацкая библиотека? Ну, дожили..
...
Рейтинг: 0 / 0
26.02.2010, 22:25
    #36491229
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
n_stringБох ты мой! Чтобы парсить json нужна эта дурацкая библиотека? Ну, дожили..
Пардон, в тему не въехал. Только вот вопрос - зачем JSON парсить? Самое простое - десериализовать его и получить объект в программе (на сишарпе - запросто, про бейсик не знаю).
...
Рейтинг: 0 / 0
26.02.2010, 22:27
    #36491233
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
А, не досмотрел, похоже, так и делается.
...
Рейтинг: 0 / 0
26.02.2010, 23:57
    #36491302
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
авторБох ты мой! Чтобы парсить json нужна эта дурацкая библиотека? Ну, дожили..
to be continued... !?
...
Рейтинг: 0 / 0
27.02.2010, 00:40
    #36491346
V ad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
Разобрался, я решил это так:

1) На клиенте:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var ResultArray = new Array();
...

for (i = 0; i < count; i++) 
{
     ...
     var RowValue = { id: current_Id, value: current_Value };
     ResultArray.push(RowValue);
}


2)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    $.post(
        "Home/GetResult",
        { result: JSON.stringify(ResultArray) },
        null,
        "json"
    );



JSON.stringify(ResultArray) - преобразуем массив в сериализованную строку

http://www.json.org/js.html



3) На сервере:

Код: plaintext
1.
2.
3.
4.
5.
6.
public class ResultItem
{
     public string id { get; set; }
     public string value { get; set; }
}


4)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
using System.Web.Script.Serialization

...

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetResult(string result)
{   
    List<ResultItem> Results = new List<ResultItem>();
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    Results= serializer.Deserialize<List<ResultItem>>(result);  // Десериализуем строку обратно в массив
}    


При такой схеме у меня все заработало.
...
Рейтинг: 0 / 0
27.02.2010, 01:00
    #36491372
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
авторПри такой схеме у меня все заработало.
заработало и хорошо! ;)

1. http://msdn.microsoft.com/en-us/library/cc836459(VS.85).aspx] JScript 5.8 includes native JavaScript Object Notation (JSON) support and the accessor methods for Document Object Model (DOM) prototypes.

IE 6 мимо - проверил в IETester - насчёт др. браузеров не проверял, извини!

2. Results= serializer.Deserialize<List <ResultItem> >(result); // Десериализуем строку обратно в массив

Loose coupling - поищи в гугле, довольно занятно!

P.S. Ладно, заболтался... Бывай!
...
Рейтинг: 0 / 0
27.02.2010, 05:55
    #36491454
n_string
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
авторJSON.stringify(ResultArray) - преобразуем массив в сериализованную строкуНе проверял, но возможно это лишнее. Соответственно здесь поменять
Код: plaintext
public ActionResult GetResult(ResultItem result)
...
Рейтинг: 0 / 0
27.02.2010, 07:48
    #36491483
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
n_stringБох ты мой! Чтобы парсить json нужна эта дурацкая библиотека? Ну, дожили..
+1

Задача решается банально родными средствами.
...
Рейтинг: 0 / 0
27.02.2010, 10:57
    #36491692
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
авторНе проверял, но возможно это лишнее. Соответственно здесь поменять
проверь!
авторЗадача решается банально родными средствами.
уже 11:00 - всё решаешь!? ;)))
...
Рейтинг: 0 / 0
27.02.2010, 12:32
    #36491897
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
vladgrigуже 11:00 - всё решаешь!? ;)))
Решил еще в третьем посте.
...
Рейтинг: 0 / 0
27.02.2010, 13:39
    #36492067
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
авторРешил еще в третьем посте.
ну, решил и молодец!
Модератор: отредактировано
...
Рейтинг: 0 / 0
28.02.2010, 00:52
    #36492941
Lamer@fools.ua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
V ad ,

ASP.NET AJAX:
Sys.Serialization.JavaScriptSerializer.serialize()
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.02.2014, 03:42
    #38546726
ы
ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
DataContractJsonSerializer более скоростной
...
Рейтинг: 0 / 0
03.02.2014, 09:54
    #38546816
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать js массив с клиента на сервер с помощью Query?
ы,

фу-фу-фу...
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как передать js массив с клиента на сервер с помощью Query? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]