2009-06-30 54 views
16

Tôi đã gặp sự cố với mã này tôi đã dành 3 giờ đồng hồ để khám phá và cố gắng tìm câu trả lời. Như tôi đã không thành công, tôi sẽ chỉ gửi mã và yêu cầu mà loại thông số tôi nên có trên dịch vụ web của tôi để xử lý yêu cầu này:ASP.NET: Vấn đề tham số jQuery AJAX 'dữ liệu'

var args = [{ key: 'myId', value: 'myValue' }, { key: 'myOtherId', value: 'myOtherValue'}]; 
var dataToSend = { name: 'fooId', value: 'fooValue', args: args }; 
$.ajax({ 
type: 'POST', 
url: 'fooURL', 
data: dataToSend, 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: OnSuccess, 
error: OnError 
}); 

Bây giờ, trong đó loại chữ ký tôi nên có để có thể để có được "dataToSend" của tôi?

Tôi đã thử:

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, List<Args> args) 
{ 
    return "OK"; 
} 

public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, object[] args) 
{ 
    return "OK"; 
} 

và cũng

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(dataToSend dataToSend) 
{ 
    return "OK"; 
} 

public class dataToSend 
{ 
    public string name { get; set; } 
    public object value { get; set; } 
    public List<Args> args = new List<Args>(); 

} 
public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

Trả lời

22

Hãy thử đi qua các dữ liệu như là một chuỗi, không phải là một đối tượng, ví dụ:

 
$.ajax({ 
    ... 
    data : '{ a: 2, b: 3 }', 
    ... 
}); 

Lý do cho điều này là nếu bạn chỉ định một đối tượng dưới dạng dữ liệu sau đó jQuery serializes dữ liệu sử dụng định dạng chuỗi truy vấn, trong khi máy chủ đang mong đợi định dạng JSON trực tiếp.

Điều này xảy ra mặc dù yêu cầu jQuery sử dụng JSON làm kiểu dữ liệu - dường như nó chỉ liên quan đến kết quả chứ không phải tải trọng yêu cầu được gửi đến máy chủ.

Mọi thứ khác bạn có ở đó có vẻ đúng với tôi.

+3

Khá chắc chắn Sam có nó ở đây. Kiểm tra http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/ để biết thêm thông tin. Giả sử chuỗi sửa lỗi nó, tôi nghĩ nó sẽ là cú pháp đầu tiên. –

0

Nếu bạn đang làm việc với JSON-enabled NET WebServices/WebMethods ... các mẹo của tôi là:

  • Hãy rất cẩn thận với cấu hình web.config. Sử dụng nó để kích hoạt các tham số lớn, phương thức POST và JSON.

  • Sử dụng khung làm việc để xử lý tuần tự hóa hóa đối tượng. Tôi muốn giới thiệu NewtonSoft's Json.NET.

Tôi không nghĩ ASP.NET tự động làm điều đó cho bạn, thông số của bạn luôn là chuỗi. Bạn nên lấy các chuỗi đó, deserialize nó và biến nó thành một mảng các đối tượng.

+0

Tôi nghĩ rằng nó. Kiểm tra điều này (mặc dù nó là MVC cùng một khái niệm nên được áp dụng cho các hình thức web): http://blogger.forgottenskies.com/?p=243 –

2

Mặc dù đây là bài đăng cũ hơn tôi nghĩ tôi sẽ đóng góp. Tôi đã gửi một mảng kết hợp cùng một ý tưởng cho một bài viết được chấp nhận, tôi chỉ thấy nó dễ viết hơn.

Javascript

postData[0] = 'data!'; 
postData[1] = 'moar data!'; 
postData[2] = 'and some data'; 

$.ajax({ 
    type: 'POST', 
    url: 'postUrl', 
    data: { data: postData }, 
}); 

PHP

$data = $_POST['data'][0]; 
$moar_data = $_POST['data'][1]; 
$and_some_data = $_POST['data'][2]; 
Các vấn đề liên quan