Javascript Web方法引发内部错误..参数匹配,因此不确定原因

Javascript Web方法引发内部错误..参数匹配,因此不确定原因,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,非常旧的1.1 vb.net/asp.net web应用程序。我正在尝试调用ajax以用以下内容填充自动完成文本框: $("#ucAddActionItemIssueActions_txtActionItem") // don't navigate away from the field on tab when selecting an item .bind("keydown", function(event) { if (event.keyCode === $.ui.keyCo

非常旧的1.1 vb.net/asp.net web应用程序。我正在尝试调用ajax以用以下内容填充自动完成文本框:

    $("#ucAddActionItemIssueActions_txtActionItem")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function(event) {
    if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) {
        event.preventDefault();
    }
}).autocomplete({
    minLength: 0,
   source: function (request, response) {
        //get client value
        var c = $("#ucAddActionItemIssueActions_ddlClientAssignTo").val();
         var params= '{"ClientID":' + c + '}';
        $.ajax({
            url: "GetLogins.asmx/GetLogins",
            data: params,
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataFilter: function (data) { return data; },
            success: function (data) {
                response($.map(data.d, function (item) {
                    return {
                        value: item.name
                    }
                }))
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(textStatus);
            }
        });},
    focus: function() {
        // prevent value inserted on focus
        return false;
    },
    select: function(event, ui) {
        var terms = split(this.value);
        // remove the current input
        terms.pop();
        // add the selected item
        terms.push(ui.item.value);
        var email = GetEmail(ui.item.value);
        email = email + ";";
        emails.push(email);
        $("#ucAddActionItemIssueActions_hdnEmails").val(emails.join(""));
        // add placeholder to get the comma-and-space at the end
        terms.push("");
        this.value = terms.join("");
        return false;
    }
});
web方法(.asmx文件)如下所示(作为测试用例):

导入System.Web.Services
导入系统集合
_
公共类GetLogins
继承System.Web.Services.WebService
_
作为字符串()的公共函数GetLogins(ByVal ClientID为整数)
Dim myList作为新的ArrayList
myList.Add(“jstevens”)
myList.Add(“jdoe”)
myList.Add(“智能输入”)
Dim arr()作为字符串=CType(myList.ToArray(Type.GetType(“System.String”)),String())
返回arr
端函数
末级
当在chrome的开发者工具中运行我的应用程序时,它抛出了一个内部500错误。当我点击它时,它说:

System.InvalidOperationException:请求格式无效: 应用程序/json;字符集=UTF-8。在 System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()位于 System.Web.Services.Protocols.WebServiceHandler.Invoke()位于 System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()


所有参数都匹配,所以我不确定为什么会抛出错误。我是否需要
web.config
文件中的任何内容来显式地引用我的.asmx文件?这是一个旧的1.1.net web应用程序,因此我不确定是否需要对web.config文件进行任何更改?

如果您将.net 1.1用于web服务和应用程序,则该web服务将不知道如何解释JSON。有很多情况会产生您所得到的错误,但是我注意到您所得到的错误发生在一个名为
ReadParameters
的方法中。所以我将重点放在参数上:

var params= '{"ClientID":' + c + '}';
我第一次就看不见了。我不是1.1 web服务专家,也不是AJAX专家,但除非我犯了很多错误,否则对于1.1 web服务来说,JSON只是一个字符串。web服务无法解释(或返回)JSON

因此,我会尝试将单个参数作为int传递:

var params = c;

看看这有什么不同

var-params='{“ClientID”:“'+c+'“}”
以引号将
c
包装为字符串,但代码隐藏方法需要一个
整数。尝试
var params='{“ClientID”:'+c+'}'application/json
不是它可以识别的请求格式。您仍然使用1.1.NET版本吗?检查这篇文章:@AnnL。您可能是对的,我需要将其更改为什么格式/内容类型<代码>内容类型:“application/json;charset=utf-8”,
@oJM86o问得好,我不确定,因为我在.NET2.0之前没有做过Ajax。1.1Web服务(IIRC)的默认交付是xml,因此我认为“application/xml;charset=utf-8”。但是,如果您计划在从web服务返回结果之前使用第三方库对结果进行JSONify,那么它可能是“application/text;charset=utf-8”,因为您将返回一个字符串。
var params = c;