2012-02-10 26 views
5

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

我的客户端代码:

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 []”来代替,而同样的问题访问单个值

+1

为什么不返回JSON和分析呢? – 2012-02-10 12:02:52

+1

请发布您的服务器端代码(您的操作方法)。我想你会返回一个包含'system.array []'的字符串,而不是一个JSON序列化数组。 – 2012-02-10 12:03:09

+0

即时消息不使用json这是我的计划B如果这不起作用 – deepakgates 2012-02-10 12:33:42

回答

12

您可以返回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); } 
}); 

编辑:当返回一个数组或列表时,您需要将传统: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,这应该为你创建一个实际的JavaScript数组对象:

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

谢谢!!有效 – deepakgates 2012-02-10 14:43:09

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对象,如Googles' gson

+0

即时通讯使用ASP.NET MVC 3 – deepakgates 2012-02-10 12:34:26