我一直在使用这段代码的问题,我花了最近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,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( { ... data : '{ a: 2,b: 3 }',... } );
这样做的原因是,如果您将对象指定为数据,则jQuery使用查询字符串格式对数据进行序列化,而服务器则期待直接使用JSON格式。
尽管告诉jQuery使用JSON作为数据类型,但这似乎只与结果相关,而不是发送到服务器的请求有效性。
其他一切对我来说都是正确的。