Возвращать массив строк из MVC в jQuery ASP.NET
Я хочу вернуть массив строк из функции 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 ответа
Вы можете вернуть 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 (используя функцию jjuery 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); }
});
РЕДАКТИРОВАТЬ: При возврате массива или списка вам нужно будет добавить традиционную опцию: true к вызову 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); },
traditional: true
});
Я не уверен на 100%, почему (я уверен, что кто-то нас заполнит), но это дало мне припадки в прошлом.
Еще один РЕДАКТИРОВАТЬ: вам может понадобиться проанализировать JSON, который должен создать фактический объект Array javascript для вас:
var onSuccess = function (data) {
//data will be your s object, in JSON format
var arr = JSON.parse(data);
};
Что ты бежишь на своей стороне?
По сути, вы можете сначала сериализовать свой массив, используя 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, таких как gson Googles.