2009-04-27 70 views
0

我想寫用戶名驗證使用jquery,我使用jmsajax plugin.I測試web服務,它工作正常。 我收到錯誤。
Webservice的代碼服務電話通過jquery

[System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    [WebMethod] 
    public bool check_username(string uname) 
    { 
     DBMOdelDataContext db = new DBMOdelDataContext(); 
     var q = from p in db.users 
       where p.username == uname 
       select p;    
     if (q.Count() == 0) 
      return false; 
     else 
      return true; 
    } 

jQuery代碼。

$(document).ready(function() { 
     $(".unamebtn").blur(function() {     
      $uname = $(this).val(); 

      $.jmsajax({ 
       type: "POST", 
       url: "Services/MyServices.asmx",      
       data:"{userName='" + $uname + "'}", 
       method: "check_username", 
       dataType: "msjson", 
       success: function(result) { 
        $("#msg").html(result); 
        alert(result); 
        $("#msg").addClass("notice"); 
       } 
      });     
     }); 
    }); 

它拋出的異常。
{「Message」:「無法將\ u0027System.String \ u0027類型的對象轉換爲\ u0027System.Collections .Generic.IDictionary`2 [System.String,System.Object] \ u0027」,「StackTrace」:「在System.Web.Script.Serialization 。ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,布爾型 throwOnError,Object & convertedObject)\ r \ n在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain (Object (System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o,Type type,JavaScriptSerializer serializer)\ r \ n在System中的\ r \ n)返回類型類型,JavaScriptSerializer序列化程序,布爾throwOnError,Object & convertedObject )。我們b.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit)\ r \ n at System.Web.Script.Serialization.JavaScriptSerializer .Deserialize [T](String input)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (HttpContext上下文,JavaScriptSerializer序列化程序)\ r \ n在System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData methodData,HttpContext上下文)\ r \ n at System.Web.Script.Services .RestHandler.ExecuteWebServiceCall(HttpContext的上下文中,WebServiceMethodData methodData)」, 「ExceptionType」 : 「System.InvalidOperationException」}

+0

跛腳,我給你的答案兩次,提前24小時提供你接受的答案 – 2009-05-01 12:10:08

回答

0

你試過了嗎?

$.jmsajax({ 
    ... 
    data: { uname: $uname }, 
    ... 
}); 
3
data: {uname:$uname}, 

不得不看看文檔實際上,jMs有點不同於正常的jQuery。 在正常的jQuery這純粹是:

$.ajax({ 
    type: "POST", 
    url: "Services/MyServices.asmx/check_username", 
    data: "{uname:'" + $uname + "'}", 
    datatype : 'json', 
contentType : 'application/json', 
    success: function(data) { 
     $("#div").html(String(data)); 
    } 
}); 

另外,請禁用GET請求來避免CSRF安全問題。

[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
+0

我已經嘗試了兩件事,但仍然收到同樣的錯誤。 – Sharique 2009-04-27 12:04:39

+0

對不起,不要返回IDictionary,不能返回一個接口。返回字典 – 2009-04-27 12:31:16

0

我有同樣的問題,發現我不知不覺地在jQuery調用中提交了一個字典對象。當提交的對​​象類型不映射到webmethod預期的參數時,似乎會出現此錯誤。如果您在$ .ajax(...)調用中沒有爲您的「數據」字段提供正確的標識符,則會收到此錯誤。讓sureyou給出一個標識符數據字段:

{PARAM_NAME: 「值」}

,而不是我在做什麼 {{field1的 「價值」,場2:值}}

的嵌套數據將導致.net嘗試將對象反序列化爲字典。沒關係,如果你的webmethod期望一個Dictionary對象,但是沒有那麼多。

0

只是一個說明,而不是太深,但我有這個錯誤,當我用方法簽名ByRef而不是ByVal!沒有看到我在做什麼,並錯過了大量的時間看代碼 - 針和乾草堆的東西。