首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PageMethods与jQuery的结合

PageMethods与jQuery的结合
EN

Stack Overflow用户
提问于 2009-05-22 10:03:39
回答 4查看 7.9K关注 0票数 3

简单地说,我想从WebMethod文件中调用带有C#属性的公共静态方法,以获得一些json和其他简单的东西(在不同的函数中)。但相反,我得到了一整页:

我没有使用asp.net AJAX,尽管我正在开发.NET 3.5框架并使用VS 2008。(客户有一些限制)

请告诉我是否可以使用asp.net ajax的页面方法,或者如果不是,其他简单的解决方案是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-08 06:15:53

经过深思熟虑,我发现了这个问题。我在用jquery可编辑插件。这就是问题的根源。当jeditable调用jquery的ajax时,它设置如下ajax选项:

代码语言:javascript
复制
    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        success: function(result, status) {
            if (ajaxoptions.dataType == 'html') {
                $(self).html(result);
            }
            self.editing = false;
            callback.apply(self, [result, settings]);
            if (!$.trim($(self).html())) {
                $(self).html(settings.placeholder);
            }
        },
        error: function(xhr, status, error) {
            onerror.apply(form, [settings, self, xhr]);
        }
    };

因此,它以简单html的形式发送这些东西,并将其与页面方法一起使用,我们需要设置这些东西,以便将其作为json发送。因此,我们需要在设置中添加如下内容:

代码语言:javascript
复制
    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        dataType: 'json', //Data Type
        contentType: 'application/json; charset=utf-8', //Content Type
       //....other settings
    };

因此,我在设置dataTypecontentType中添加了两个新属性,并将其更改为:

代码语言:javascript
复制
    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        dataType: settings.dataType,
        contentType: settings.contentType,
       //....other settings
    };

现在出现了另一个问题:(它将数据(来自submitdata属性)作为正常的查询字符串发送,而asp.net在json请求中不接受该查询字符串。因此,我不得不使用jquery的json插件并使用dataType上的以下测试来改变ajax中数据的发送方式:

代码语言:javascript
复制
    if (settings.dataType == "json") {
        if ($.toJSON) {
            submitdata = $.toJSON(submitdata); 
        }
    }

就像微风一样!

票数 3
EN

Stack Overflow用户

发布于 2009-05-22 10:56:04

我不确定,但我认为WebMethods只能通过asp.net AJAX访问。不过,我可能错了,因为我们根本没有那样做。我们用一种稍微不同的方式来做。

我们构建了一个aspx页面,它接受我们所有的AJAX请求并将它们传递给后续的方法。

服务器端代码

代码语言:javascript
复制
If Not (Request("method") Is Nothing) Then
            method = Request("method")
            username = HttpContext.Current.User.Identity.Name.ToString
            Select Case UCase(method)
                Case "GETPROJECTS"
                    Response.ContentType = "text/json"
                    Response.Write(GetProjects(Request("cid"), Request("status")))
                    Exit Select
        end select
end if

使用jquery的客户端代码

代码语言:javascript
复制
$.ajaxSetup({
        error: function(xhr, msg) { alert(xhr, msg) },
        type: "POST",
        url: "Ajax.aspx",
    beforeSend: function() { showLoader(el); },
        data: { method: 'GetProjects', cid: "2", status:"open"},
        success: function(msg) {
            var data = JSON.parse(msg);
            alert(data.Message);
        },
        complete: function() { hideLoader(el);  }
    });

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2009-05-22 19:27:21

拉斯·卡姆在对另一个问题的答复上发布了这个链接(如果这有帮助的话,可以投票给他的答案):

使用jQuery直接调用ASP.NET AJAX页面方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/897176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档