3

简单地说,我想在jquery.ajax的代码隐藏 C# 文件中调用用WebMethod属性修饰的公共静态方法,以获取一些 json 和其他简单的东西(在不同的函数中)。但相反,我得到了整个页面:'(

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

请让我知道我是否可以通过使用 asp.net ajax 来使用页面方法,或者如果不能,其他简单的解决方案是什么?

4

4 回答 4

3

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

    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形式发送。所以我们需要像这样在设置中添加一些东西:

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

所以我在设置dataTypecontentType中添加了两个新属性,并在上面更改为:

    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        dataType: settings.dataType,
        contentType: settings.contentType,
       //....other settings
    };

现在出现了另一个问题:(它正在发送数据(来自submitdata属性)作为 asp.net 不接受json请求的普通查询字符串。所以我不得不使用jquery 的 json 插件并使用以下方法更改数据在 ajax 中发送的方式测试数据类型:

    if (settings.dataType == "json") {
        if ($.toJSON) {
            submitdata = $.toJSON(submitdata); 
        }
    }

它就像微风一样工作!!!

于 2009-06-08T06:15:53.890 回答
1

我不确定,但我认为 WebMethods 只能通过 asp.net AJAX 访问。不过我可能错了,因为我们根本不那样使用它。我们以稍微不同的方式来做这件事。

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

服务器端代码

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]

$.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);  }
    });

希望这可以帮助。

于 2009-05-22T10:56:04.953 回答
1

Russ Cam 发布此链接以回答另一个问题(因此,如果这有帮助,请投票给他的答案;)):

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

于 2009-05-22T19:27:21.387 回答
1

Dave Ward 有一系列文章直接使用 jQuery 和 ASP.Net PageMethods,不需要 MS Ajax UpdatePanel。特别是这篇文章将帮助您入门。

于 2009-05-23T10:58:34.713 回答