2012-02-10 38 views
5

Tôi muốn trả về một chuỗi các chuỗi từ một hàm MVC thông qua một cuộc gọi jQuery AJAX.Trả về mảng chuỗi từ MVC đến jQuery ASP.NET

mã phía khách hàng của tôi là:

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

Nhưng tôi không thể đọc được các phần tử mảng. Trong số alert(data), mã này luôn có nghĩa là system.array[] và trong alert(data[0]) nó nói s (tức là ký tự đầu tiên trong system.array []) và không phải là thành phần mảng.

đây được đơn giản hóa phiên bản của mã phía máy chủ của tôi .. gây ra ban đầu là cách lớn quá phức tạp :)

public Array GetCharacters() 
    { 

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

nhưng điều này mang đến cho "System.String []" thay vào đó và cùng một vấn đề khi truy cập vào các giá trị cá nhân

+1

Tại sao không trở về JSON và phân tích đó? –

+1

Vui lòng đăng mã phía máy chủ của bạn (phương thức hành động của bạn). Tôi nghĩ rằng bạn đang trả về một chuỗi chứa 'system.array []', chứ không phải là một mảng tuần tự hóa JSON. –

+0

im không sử dụng json đó là kế hoạch của tôi B nếu điều này không làm việc ra – deepakgates

Trả lời

12

Bạn có thể trở JSON.

Ví dụ, bạn có thể thực hiện một yêu cầu Ajax đến controller action sau:

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 
} 

Sau đó, javascript của bạn có thể thực hiện một yêu cầu Ajax (sử dụng chức năng Ajax jQuery) với bộ điều khiển:

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

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

EDIT: Khi trả về một mảng hoặc Danh sách, bạn sẽ cần thêm tùy chọn truyền thống: true vào cuộc gọi Ajax, như sau:

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 
}); 

Tôi không chắc chắn 100% lý do tại sao (Tôi chắc chắn ai đó sẽ điền chúng tôi vào), nhưng điều đó đã cho tôi phù hợp trong quá khứ.

Thêm một EDIT: Bạn có thể cần phải phân tích JSON, mà nên tạo một đối tượng mảng javascript thực tế dành cho bạn:

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

cảm ơn !! nó đã làm việc – deepakgates

1

Bạn đang chạy gì ở phía bên phụ trợ của mình?

Về cơ bản, bạn có thể muốn tuần tự hóa mảng của mình trước bằng json hoặc xml.

Nếu đó là PHP, đây là một ví dụ từ jQuery .post API

Ví dụ: bài viết để trang test.php và được nội dung đó đã được trả lại ở định dạng JSON.

mã PHP

đang

<?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"); 

Nếu đó là JAVA bạn có thể sử dụng một thư viện để serialize đối tượng json như Googles' gson

+0

im sử dụng ASP.NET MVC 3 – deepakgates

Các vấn đề liên quan