简单地说,我想在jquery.ajax的代码隐藏 C# 文件中调用用WebMethod属性修饰的公共静态方法,以获取一些 json 和其他简单的东西(在不同的函数中)。但相反,我得到了整个页面:'(
虽然我正在为 .NET 3.5 框架开发并使用 VS 2008,但我没有使用 asp.net AJAX。(客户端有一些限制)
请让我知道我是否可以通过使用 asp.net ajax 来使用页面方法,或者如果不能,其他简单的解决方案是什么?
简单地说,我想在jquery.ajax的代码隐藏 C# 文件中调用用WebMethod属性修饰的公共静态方法,以获取一些 json 和其他简单的东西(在不同的函数中)。但相反,我得到了整个页面:'(
虽然我正在为 .NET 3.5 框架开发并使用 VS 2008,但我没有使用 asp.net AJAX。(客户端有一些限制)
请让我知道我是否可以通过使用 asp.net ajax 来使用页面方法,或者如果不能,其他简单的解决方案是什么?
经过深思熟虑,我发现了问题所在。我正在使用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
};
所以我在设置dataType和contentType中添加了两个新属性,并在上面更改为:
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);
}
}
它就像微风一样工作!!!
我不确定,但我认为 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); }
});
希望这可以帮助。
Russ Cam 发布此链接以回答另一个问题(因此,如果这有帮助,请投票给他的答案;)):