【问题标题】:ASP .NET call Webmethod with ajax request from javascriptASP .NET 使用来自 javascript 的 ajax 请求调用 Webmethod
【发布时间】:2015-05-12 18:28:06
【问题描述】:

我从 iFrame 调用它!我认为这将是主要问题。

我正在尝试使用 ajax 请求在 ASP 中调用 WebMethod。但我没有得到想要的回应。这是我的页面的代码。 我称之为

Ext.Ajax.request({url:  'Default.aspx/DispatchMethod'});

问题是我在响应中得到 html 而不是字符串“TEST”。知道为什么吗?

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public static String DispatchMethod() 
    {
        return "TEST";
    }
}

使用 WebService(.asmx 扩​​展名)后,我得到了一个

This web service is using http://tempuri.org/ as its default namespace.

建议:在 XML Web 服务公开之前更改默认命名空间。

每个 XML Web 服务都需要一个唯一的名称空间,以便客户端应用程序将其与 Web 上的其他服务区分开来。 http://tempuri.org/ 可用于正在开发的 XML Web services,但已发布的 XML Web services 应使用更永久的命名空间。

您的 XML Web 服务应该由您控制的名称空间来标识。例如,您可以使用公司的 Internet 域名作为命名空间的一部分。尽管许多 XML Web 服务名称空间看起来像 URL,但它们不需要指向 Web 上的实际资源。 (XML Web 服务命名空间是 URI。)

对于使用 ASP.NET 创建的 XML Web services,可以使用 WebService 属性的 Namespace 属性更改默认命名空间。 WebService 属性是应用于包含 XML Web 服务方法的类的属性。下面是一个将命名空间设置为“http://microsoft.com/webservices/”的代码示例:

C#

【问题讨论】:

标签: javascript c# asp.net ajax


【解决方案1】:

我不确定您的代码结构是否用于 Q,如果不是,那么您可能需要从解耦开始并专注于 AJAX 请求中“ContentType”的关键元素。

首先将 .asmx(这也是 [WebMethod] 所指的)文件添加到您的解决方案中。

然后添加方法:

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello, World";
    }

现在假设您使用外部 js 表单,应用以下逻辑(Onload 或 OnClick):

        $.ajax
         ({
             type: "POST",
             contentType: "application/json; charset=utf-8",
             url: "/webservice-folder/webservice.asmx/HelloWorld",
             success: (function (data) {
                 alert(data.d)
             }),
             error: (function () {
                 alert("error");
             })
         });

【讨论】:

  • 我终于明白了,谢谢
  • 否决 .asmx 推荐。当轻量级页面方法绰绰有余时,没有理由在应用程序中放置已弃用的技术和额外的层。
【解决方案2】:

好的,让我们澄清一下。您使用的是页面方法,而不是 XML Web 服务,并且您真的不想走上使用 asmx 服务的黑暗道路,只是为了公开客户端脚本的端点。

您的页面方法语法看起来没问题。您的问题可能与您提供的选项有关(很可能是因为内容类型未设置为 application/json)。

你提到你得到了 HTML。那么,什么样的HTML?会不会是错误页面?

【讨论】:

  • 您是对的,内容类型未正确发送。我赞成你的答案,因为另一张海报也提供了内容类型的答案。
【解决方案3】:

我认为您需要的 url 是:“DispatchMethod”

可能是错的。

您可能还需要更多字段,如下所示:

$.ajax({
            dataType: "json",
            url: "DispatchMethod",
            data: {
                "customerNo": customerNo,
                "productNo": productNo
            },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    相关资源
    最近更新 更多