2012-10-03 485 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