2012-10-03 495 views
2

我正在使用JQuery和Ajax与ASP.Net Web服务进行接口。这里是jQuery代码:获取500错误

$.jrpc = function(url, id, method, params, success, error) { 
    var request = $.json_stringify({ 
     'jsonrpc': '2.0', 'method': method, 
     'params': params, 'id': id}); 
    return $.ajax({ 
     url: url, 
     data: "json=" + encodeURIComponent(request), 
     success: success, 
     error: error, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     async: true, 
     cache: false, 
     //timeout: 1, 
     type: 'POST'}); 
}; 

这里是Web服务代码:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class Access : System.Web.Services.WebService 
{ 

    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string EntryMethod(string json) 
    { 
     Requests d = JsonConvert.DeserializeObject<Requests>(json); 
     Response resp = new Response(); 
     resp.jsonrpc = d.jsonrpc; 
     resp.result = "Got the call!"; 
     resp.id = d.id; 
     resp.error = null; 
     JavaScriptSerializer response = new JavaScriptSerializer(); 
     string r = response.Serialize(resp); 

     return r; 
    } 
} 

我收到此错误:

[AJAX]错误 - 服务器效应初探是: {“消息“:”无效的JSON基元:json。“,”StackTrace“:”在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度) \ r \ n在System.Web.Script.Serialization.JavaScript在System.Web.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化程序,字符串输入,类型类型,Int32 depthLimit)\ r \ n上的ObjectDeserializer.BasicDeserialize(String input,Int32 depthLimit,JavaScriptSerializer序列化程序)\ r \ n .Script.Serialization.JavaScriptSerializer.Deserialize [T](String input)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext上下文,JavaScriptSerializer序列化程序)\ r \ n .RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext的上下文)\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的上下文中,WebServiceMethodData methodData)”, “ExceptionType”: “System.ArgumentException”}

使用ASP.Net webservice测试页面,以下是我的标题和请求字符串: Cache-Control:隐私te,max-age = 0 Date:Wed,03 Oct 2012 19:47:16 GMT Content-Length:149 Content-Type:text/xml;字符集= UTF-8 服务器:ASP.NET开发服务器/ 10.0.0.0 X-ASPNET-版本:4.0.30319 连接:关闭

JSON =%7B%22jsonrpc%22%3A%222.0%22% 2C%22方法%22%3A%22测试%22%2C%22params%22%3A%5B%5D%2C%22%%22%3A1%7D

这里是我的Ajax调用的头/请求字符串,没有工作: Cache-Control:private Date:Wed,03 Oct 2012 19:47:09 GMT Content-Length:1062 Content-Type:application/json;字符集= UTF-8 jsonerror:真 服务器:ASP.NET开发服务器/ 10.0.0.0 X-ASPNET-版本:4.0.30319 连接:关闭

JSON =%7B%22jsonrpc%22%3A% 222.0%22%2C%22方法%22%3A%22%22%2C%22%22%3A%5B%5D%2C%22%%22%3A1%7D

任何想法,为什么我得到这个错误?我试着用Google搜索,但没有结果真的帮助我。

编辑:

如果我使用: 数据: “{ 'jsonrpc': '2.0', '方法': '测试', 'PARAMS':[], 'ID':1}”,

我得到这个错误: [AJAX]错误 - 服务器效应初探是: { “消息”: “无效的Web服务调用,进行参数缺失值:\ u0027json \ u0027。”, “堆栈跟踪”:”在系统.Web.Script.Services.WebServiceMethodData.CallMethod(Object target,IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary 2 parameters)\ r \ n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context,WebServiceMethodData methodData,IDictionary`2 rawParams)\ r \ n在System.Web.Script.Services.R estHandler。ExecuteWebServiceCall(HttpContext的上下文中,WebServiceMethodData methodData) “ ”ExceptionType“: ”System.InvalidOperationException“}

如果我使用: 数据:” JSON = { 'jsonrpc': '2.0', '方法': '测试' 'PARAMS':[], 'ID':1}”,

我得到这个错误: [AJAX]错误 - 服务器效应初探是: { “消息”: “无效的JSON原始:JSON” “System.Web.Script的System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度)\ r \ n上的System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n中的”StackTrace“:” Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer序列化程序) \ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化程序,字符串输入,类型类型,Int32 depthLimit)\ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String输入)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext上下文,JavaScriptSerializer序列化程序)\ r \ n System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext上下文)\ r \ n \ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData methodData)“,”ExceptionType“:”System.ArgumentException“}

+0

似乎你的代码有反序列化你发送给它的问题,你可以发布你发送的实际json吗? – ars265

+0

发表于json。 – Sugitime

回答

3

变化 数据: “JSON =” + encodeURIComponent方法(请求), 到
数据: “{JSON: '” + encodeURIComponent方法(请求)+ “'}”,

看的示例代码

$.ajax("WebService.asmx/EntryMethod", { 
     contentType: "application/json; charset=utf-8",dataType: "json", 
     type: "POST", data: "{json:'value'}", success: function (r) { alert(r); }, 
     error: function (e) { alert(e); } 
    }); 
+0

这是干的废话。非常感谢! – Sugitime

2

尝试从data属性中删除'json =',确保encodeURIComponent(request)是一个json对象,我猜测它不是。

+0

变化: 数据:要求, 我得到这个错误:{ “消息”: “无效的Web服务调用,进行参数缺失值:\ u0027json \ u0027。”, “堆栈跟踪”:” – Sugitime

+0

是有什么办法在这里发布你正在发布的json数据? – ars265

+0

尝试评论该类中的反序列化和其他所有内容,并将返回值设为“1”;并查看在客户端是否得到1;这将有助于查明问题无论是json序列化问题还是ajax安装问题,如果它是ajax安装问题,那么URL通常是一个常见的错误来源: – frenchie