vb .net ajax call:未知的web方法

时间:2013-05-29 16:02:35

标签: asp.net ajax vb.net json

我已经看到其他一些帖子有这个错误,但我已经尝试了那些建议的所有内容,但我仍然有问题。

这是我的webMethod(和类):

<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class UPSImportWebServices
    Inherits System.Web.Services.WebService

    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
    <WebMethod()> _
    Public Shared Function GetInvoiceItems(ByVal invoiceId As Integer) As List(Of UPSInvoiceItem)
        Return UPSInvoiceDataAccess.getInvoiceItems(invoiceId)
    End Function

End Class

我只是在准备好文件时调用它:

$(document).ready(function () {
    $.ajax({
        type: "POST",
        url: '<%=ResolveUrl("~/UPSImportWebServices.asmx/GetInvoiceItems") %>',
        data: { invoiceID: "22" },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert('worked' + data)
        },
        error: function (response) {
            alert('error: ' + response.responseText);
        },
        failure: function (response) {
            alert('failure: ' + response.responseText);
        }
    });
});

这给了我错误: 未知的Web方法GetInvoiceItems。参数名称:methodname。

编辑:将invoiceID: "22"更改为invoiceID: 22。还有同样的问题。

3 个答案:

答案 0 :(得分:2)

我想我发现了这个问题。我复制了一个现有的.asmx文件而不是创建一个新文件。当我访问url site.com/UPSImportWebServices.asmx时,它显示了我复制的Web服务的功能。我删除了.asmx文件并创建了一个新文件,然后复制了我的旧代码。它现在正在运作。

此外,更改为'{ invoiceId:' + 22 + '}'。注意'和大写。新秀在这个错误。

答案 1 :(得分:1)

嗯,我认为这可能与您传递的变量类型有关。 GetInvoiceItems期望一个整数,你传递一个字符串。尝试更改此

data: { invoiceID: "22" },

到此:

data: { invoiceID: 22 },

让我知道这是否有效。如果没有,我们可以转向下一个可能性。

尝试更改此内容:

url: '<%=ResolveUrl("~/UPSImportWebServices.asmx/GetInvoiceItems") %>',

到此:

 url: 'UPSImportWebServices.asmx/GetInvoiceItems',

并确保您的asmx文件的拼写正确(区分大小写)

最后,尝试将您的方法设为公开,而不是公开共享。

答案 2 :(得分:1)

尝试这样做。

data: JSON.stringify({ invoiceId: 22 })

webservice需要一个JSON字符串。

此外,参数区分大小写。 “invoiceID”中的“D”大写,而Web方法则期望它为“invoiceId”(小写d)。