【问题标题】:Want to call webservice by javascript or jquery without any c# code想通过javascript或jquery调用webservice而不需要任何c#代码
【发布时间】:2014-02-05 07:06:12
【问题描述】:

我想只通过 javascript / jquery 访问 asp.net 网络服务,而无需任何 c# 代码..
我已经生成了如下所示的简单网络服务..

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[WebMethod]
public string TestNameService(string name)
 {
    return "data-" + name;
 }

在另一个域上,我使用文本框和按钮发送请求,并且在标签上我想显示输出。
喜欢这个

<asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="call_service" runat="server" Text="Call Service" OnClientClick="CallService(); return false;" />
<asp:Label ID="lblMsg" runat="server" Text="" />



我曾尝试使用在同一域中工作的这个 jquery.. 但我无法访问多个域上的方法,如果我访问方法,那么我只会得到空白响应

<script type="text/javascript">
        function CallWebService() {
            $.ajax({
                type: "POST",
                url: "http://......myurl..../WebService.asmx",
                data: "{'name':'" + $("#txt_name").val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: ShowData,
                error: error

            });
        }
        function ShowData(data, status) {
            $("#lblMsg").html(data.d);
        }
        function error(request, status) {  
            alert(request.statusText);
        }
    </script>

【问题讨论】:

  • 你试过用jquery ajax方法调用webservice吗?
  • @mayur 是的,我已经尝试过了,但它不起作用..
  • 您遇到了什么错误?
  • @Brad larson - 这不是你编辑的问题。它也是一个答案,因为它在同一个域中工作。我想在多域中运行,所以我写了答案,以便其他用户可以使用..谁需要通过同一域中的 java 脚本运行 Web 服务..如果你有答案,那么说其他明智的不要编辑问题,因为你改变了问题的方向..
  • @Brad Larson 我没有任何问题。一些用户想知道我的同一域的脚本,所以我发布了答案以获得多个域的修改答案。你知道这个问题吗?您可以使用 mayur borad 给出的 jquery 看到相同的答案。该 ans 也适用于同一域。如果您知道任何答案,布拉德我仍在等待答案,然后给出答案,除了修改问题和 cmets。我已经发布了脚本作为答案,因为我希望用户的不同想法代替相同的脚本想法,所以如果可能的话,请保持我的问题/答案不变。谢谢。

标签: c# javascript jquery asp.net web-services


【解决方案1】:

如果你使用的是跨域,你必须指定到jquery with following

$.support.cors = true;
$.ajax({
                type: "POST",
                url: "http://......myurl..../WebService.asmx",
                data: "{'name':'" + $("#txt_name").val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: ShowData,
                error: error

            });

如果不起作用,请告诉我。

【讨论】:

  • 我已经尝试过了,但我现在遇到了同样的问题,它正在显示 --> ReferenceError: CallService is not defined 如果我在 url 中添加呼叫服务,那么它也会给出同样的问题.. 像 -- > http://......myurl..../WebService.asmx/TestNameService
  • 如果您没有第 3 方 Web 服务,则在您的 Web 服务项目的 Global.asmx 的 Application_BeginRequest 事件上设置断点。如果您没有此事件,请创建它。并检查您的调试器点是否已触发?
  • 我已经在本地服务器上运行,如果我在 url 中添加服务名称,我会遇到 2 个问题,然后我会收到 '500 Internal Server Error - http://---url--- /WebService.asmx/TestNameService"' 如果我简单地运行 web 服务然后显示 - '405 方法不允许 web 服务 - http://---url---/WebService.asmx"'
  • 你能打开你的网络服务吗?你是用本地主机打开它吗?
  • 进行 ajax 调用时是否在 Global.asmx 上获得断点?
【解决方案2】:

如果我理解您的问题,您的正常 javascript ajax 请求将失败,因为您的解决方案似乎位于不同的域中。

您将需要使用一种称为CORS 的技术,该技术在 .NET 平台中也受支持,请参阅:

http://encosia.com/using-cors-to-access-asp-net-services-across-domains/

【讨论】:

  • 感谢您的回复,但根据要求,我必须使用简单的 javascript / jquery 来完成。我已经看到了,它和我的脚本一样......在我的脚本中我无法访问方法,如果我访问方法,那么我只会得到空白响应..
  • @Shirish 启用 CORS 后,您将只能使用 javascript 来完成此操作
  • 好的,我会尝试,因为我从未使用过这个 CORS,所以我必须阅读所有内容.. 你看过我的脚本吗?你对这个脚本有什么想法吗?
猜你喜欢
  • 2021-06-02
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2012-05-26
相关资源
最近更新 更多