Возвращать массив строк из MVC в jQuery ASP.NET - PullRequest
6 голосов
/ 10 февраля 2012

Я хочу вернуть массив строк из функции MVC с помощью вызова jQuery AJAX.

Мой код на стороне клиента:

function get_categories() {
    var url = "/Profile/GetCharacters";
    $.post(url, function (data) {
    alert(data);
});

Но я не могу прочитать элементы массива. В alert(data) всегда говорится system.array[] и в alert(data[0]) он говорит s (то есть первый символ в system.array []), а не элементы массива.

Вот упрощенная версия моего серверного кода .. потому что оригинал слишком сложен:)

public Array GetCharacters()
    {

        var ret = new string[10];
        ret[0]="abc";
        ret[1] = "def";
        ret[2] = "ghi";
        return (ret);
    }

но вместо этого выдается «System.string []» и та же проблема при доступе к отдельным значениям

Ответы [ 2 ]

14 голосов
/ 10 февраля 2012

Вы можете вернуть JSON.

Например, вы можете сделать Ajax-запрос для следующего действия контроллера:

public JsonResult GetMyData()
{
    SomeClass s = new SomeClass();
    s.Property1 = "value";
    s.Property2 = "another value";

    return Json(s, JsonRequestBehavior.AllowGet); //you will need the AllowGet option to return data to a GET request
}

Затем ваш javascript может выполнить Ajax-запрос (используя jQueryФункция Ajax) к контроллеру:

var onSuccess = function (data) {
    //data will be your s object, in JSON format
};

$.ajax({
    type: 'GET',
    url: '/ControllerName/GetMyData/',
    success: function (data) { onSuccess(data); }
});

РЕДАКТИРОВАТЬ: При возврате массива или List вам нужно будет добавить к вызову Ajax традиционный: true, например:

var onSuccess = function (data) {
    //data will be your s object, in JSON format
};

$.ajax({
    type: 'GET',
    url: '/ControllerName/GetMyData/',
    success: function (data) { onSuccess(data); },
    traditional: true
});

Я не уверен на 100%, почему (я уверен, что кто-то нас заполнит), но это дало мне припадки в прошлом.

Еще один РЕДАКТИРОВАТЬ : Вам может понадобиться проанализировать JSON, который должен создать для вас реальный объект Array javascript:

var onSuccess = function (data) {
    //data will be your s object, in JSON format
    var arr = JSON.parse(data);
};
1 голос
/ 10 февраля 2012

Что у вас на бэкэнде?

Как правило, вы можете сначала сериализовать массив, используя json или xml.

Если это PHP, вот пример из jQuery .post API

Пример: отправляет сообщения на страницу test.php и получает содержимое, которое было возвращено в формате json.

PHP код

<?php echo json_encode(array("name"=>"John","time"=>"2pm")); ?>

JQuery код

$.post("test.php", { "func": "getNameAndTime" },
 function(data){
   console.log(data.name); // John
   console.log(data.time); //  2pm
 }, "json");

Если это JAVA, вы можете использовать библиотеку для сериализации объектов json, таких как googles 'gson

...