6

我想通过 jQuery AJAX 调用从 MVC 函数返回一个字符串数组。

我的客户端代码是:

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 []”,并且出现了同样的问题

4

2 回答 2

15

您可以返回 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 调用中添加 traditional: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,它应该为您创建一个实际的 javascript Array 对象:

var onSuccess = function (data) {
    //data will be your s object, in JSON format
    var arr = JSON.parse(data);
};
于 2012-02-10T13:10:25.120 回答
1

你在后端运行什么?

基本上,您可能希望首先使用 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 对象,例如Google 的 gson

于 2012-02-10T12:27:21.160 回答