使用 JQuery $.AJAX 调用调用 ASP.NET 函数

Posted

技术标签:

【中文标题】使用 JQuery $.AJAX 调用调用 ASP.NET 函数【英文标题】:Calling ASP.NET function using JQuery $.AJAX call 【发布时间】:2011-12-21 08:40:39 【问题描述】:

我的页面在单击按钮时调用的函数中包含以下代码:

$.ajax(   
    type: "POST",   
    url: "ProviderPortal.aspx/ppTransferToProvider",   
    data: "ICA_Key:'" + ICAKey + "', PROV_Key:'" + Provider + "'",   
    contentType: "application/json; charset=utf-8",
    async: true,           
    cache: false,    
    dataType: "json",   
    success: function(msg)      
        alert(msg) 
     
); 

此代码以Calling an ASP.NET server side method via jQuery 的选定答案为模型

但是,我不确定 ASP.NET (VB, Net 2.0) 函数签名是否

<WebMethod()> _
Public Shared Function ppTransferToProvider( _
    ByVal ICA_Key As String, _ 
    ByVal Prov_Key as String) As String

页面上的数据将作为不同的参数接收数据,或者作为必须针对这些值进行解析的字符串。此外,我无法确定呼叫是否正确;似乎函数本身的断点永远不会被命中,所以我自己看不到。

a) 参数是作为一个大字符串传递的,还是使用两个参数正确传递给我的函数? b) 如何跟踪 ASP.NET 函数的执行?或者是否可以追踪,因为它是共享的?

【问题讨论】:

【参考方案1】:

问题是您正在传递string,而您的服务需要一组对象。请尝试以下方法

data: ICA_Key: ICAKey, PROV_Key: Provider ,

【讨论】:

感谢您的回复!您知道是否可以在共享函数中添加断点并跟踪其执行情况? @taserian 是的,这是可能的。它不应该与正常功能有任何不同。注意:我刚刚意识到这是一个Shared 方法。它可能需要是非共享方法才能作为 Web 服务的一部分正常工作。不过我不确定。 呃,没有。数据属性必须包含在字符串中。这在原始问题中的写法是正确的,除了 PROV_Key 属性。【参考方案2】:

如果您要传递对象,请硬着头皮使用JSON2.stringify。然后您可以使用 js 对象,现在担心字符串操作、引号、解析..等:

var exmapleParams = ICA_Key: ICAKey, PROV_Key: Provider ;

$.ajax(   
    type: "POST",   
    url: "ProviderPortal.asmx/ppTransferToProvider",   
    data: JSON2.stringify(exmapleParams),   
    contentType: "application/json; charset=utf-8",
    async: true,           
    cache: false,    
    dataType: "json",   
    success: function(msg)  //ms web services return .d
        alert(msg.d) 
     
); 

<WebMethod()> _
Public Shared Function ppTransferToProvider( _
    ByVal exmapleParams As CustomObject) As String

【讨论】:

感谢您提供 stringify 的指针!作为一个 JSON 新手,一般来说,这是一个很大的帮助。【参考方案3】:

但是,我不确定页面上的 ASP.NET (VB, Net 2.0) 函数签名 [...] 是否会将数据作为不同的参数接收,或者作为必须解析的字符串接收这些价值观

您将获得不同的值。您的$.ajax 调用中的data 属性可能需要更改为:

data: "ICA_Key:'" + ICAKey + "', PROV_Key:'" + Provider + "'",   

到:

data: "ICA_Key:'" + ICAKey + "', Prov_Key:'" + Provider + "'",   

我说可能只是因为我不知道VB.NET在这方面是否区分大小写,但是C#确实要求javascript对象属性的大小写与AJAX中的参数完全匹配网络方法。

请注意,您的 VB 函数需要名为 ICA_KeyProv_Key 的变量。如果名称 PROV_Key 是正确的,那么您可能需要重命名您的 VB 参数以匹配您传递的内容。

b) 如何跟踪 ASP.NET 函数的执行?或者是否可以追踪,因为它是共享的?

您可以跟踪 WebMethod 的执行,但您确实需要删除 shared 关键字(据我了解,VB 中的 shared 相当于 C# 中的 static,所以我的回答是基于此) .

希望这会有所帮助。

【讨论】:

但是 装饰器仅适用于共享(静态)函数,据我所知。 MSDN 中的示例不包含该关键字,并且我的 WebMethods 都没有使用 static 关键字。我将它们更改为静态以测试我的 $.ajax 调用,但它们停止使用该关键字。 以上是我的错。它不是一个 asmx 网络服务,而是一个 aspx 页面。由于页面类可以实例化,所以需要 Shared 关键字,但这破坏了我的可追溯性。 啊,好吧。有什么理由需要它出现在 aspx 页面上吗?据我了解,虽然 asmx Web 服务是遗留的,但对它们的支持比 aspx 页面方法更多。 这里使用了 asmx Web 服务,但它们都需要来自 Active Directory 的凭据,而 Provider Portal 的用户没有这些凭据。我正在使用的 WebMethod 函数模拟授权用户来调用所需的 Web 服务,从而增加了与此处使用的 Web 服务方法的分离度。

以上是关于使用 JQuery $.AJAX 调用调用 ASP.NET 函数的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net Webservice - 使用 jquery AJAX 安全调用 Web 服务

如何使用 jQuery AJAX 调用 ASP.Net 字符串函数?

ASP.NET中JQuery+AJAX调用后台

如何使用 jQuery Ajax 调用从 ASP.NET Web Api 下载 CSV 文件

使用 jQuery AJAX“401(未经授权)”的 ASP.NET 调用 WebMethod

如何使用 ASP.NET MVC Rest API 调用和 jQuery Ajax 下载文件