сервисный звонок через JQuery - PullRequest
0 голосов
/ 27 апреля 2009

Я пытаюсь написать подтверждение имени пользователя с помощью jquery, я использую плагин jmsajax. Я протестировал веб-сервис, он работает нормально. Я получаю ошибку.
Код веб-сервиса

[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; 
    }

Код запроса.

$(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 (Объект o, Тип типа, Сериализатор JavaScriptSerializer, Логическое значение throwOnError, Object & convertObject) \ r \ n в System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain (Объект o, Тип type, Сериализатор JavaScriptSerializer, Логический throwOnError, Объект & convertObject ) \ r \ n в System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType (Object o, Type type, JavaScriptSerializer serializer) \ r \ n в System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer сериализатор, строковый ввод, тип Type, Int32 deepLimit) \ r \ n в 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 в System.Web.Script.Services .RestHandler.ExecuteWebServiceCall (контекст HttpContext, метод WebServiceMethodData methodData) "," ExceptionType " : "System.InvalidOperationException"}

Ответы [ 4 ]

3 голосов
/ 27 апреля 2009
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 голосов
/ 20 сентября 2013

Просто примечание, и не вдаваясь слишком глубоко, но у меня была эта ошибка, когда я использовал ByRef вместо ByVal в Signature метода! Я не смотрел на то, что я делал, и скучал по нему много раз, глядя на код - иголку и стог сена.

0 голосов
/ 09 июля 2009

У меня была та же проблема, и я обнаружил, что неосознанно отправляю объект словаря внутри вызова jQuery. Кажется, ошибка возникает, когда отправленный тип объекта не соответствует параметру, ожидаемому вашим веб-методом. Если вы не предоставите правильный идентификатор для своего поля «data» в вызове $ .ajax (...), вы получите эту ошибку. Убедитесь, что в поле данных указан идентификатор:

{param_name: "значение"}

вместо того, что я делал {{Field1: "значение", field2: значение}}

Вложенные данные приведут к тому, что .net попытается десериализовать объект как словарь. Это нормально, если ваш веб-метод ожидает объект Dictionary, но в остальном не так много.

0 голосов
/ 28 апреля 2009

ты пробовал?

$.jmsajax({
    ...
    data: { uname: $uname },
    ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...