ASP.NET:jQuery AJAX’数据’参数问题

我一直有这个代码的问题,我花了最近3个小时挖掘并试图找到答案。 由于我没有成功,我将发布代码并询问我应该在我的Web服务上使用哪种参数来处理此请求:

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

现在,我应该获得哪种签名才能获得“dataToSend”?

我试过了:

 [WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string Foo(string name, object value, List 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"; } 

并且

 [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 = new List(); } public class Args { public string key { get; set; } public object value { get; set; } } 

尝试将数据作为字符串传递,而不是对象,即:

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

这样做的原因是,如果您将对象指定为数据,则jQuery使用查询字符串格式序列化数据,而服务器则直接期望JSON格式。

尽管告诉jQuery使用JSON作为数据类型,但这似乎只与结果有关,而不是与发送到服务器的请求有效负载有关。

你在那里拥有的其他一切对我来说都是正确的。

虽然这是一篇较老的post,但我认为我会做出贡献。 我一直在发送一个关联数组相同的想法一个接受的post,我发现它更容易编写。

使用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]; 

如果您正在使用支持JSON的.NET WebServices / WebMethods …我的提示是:

  • 对web.config配置要非常小心。 使用它来启用大参数,POST方法和JSON。

  • 使用框架来处理对象序列化和反序列化。 我会推荐NewtonSoft的Json.NET。

我不认为ASP.NET会自动为你做,你的参数总是字符串。 您应该获取该字符串,对其进行反序列化并将其转换为对象数组。