我在过去的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> 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> args = new List<Args>(); } public class Args { public string key { get; set; } public object value { get; set; } }
尝试将数据作为字符串而不是对象传递,即:
$ .ajax({ ... 数据:“ {a:2,b:3}”, ... });
这样做的原因是,如果您将一个对象指定为数据,那么jQuery将使用查询字符串格式对数据进行序列化,而服务器将直接使用JSON格式。
尽管告诉jQuery使用JSON作为数据类型,但仍会发生这种情况-它似乎仅与结果有关,而与发送到服务器的请求有效负载无关。
你在那里的其他一切对我来说都是正确的。