简单地说,我想从WebMethod文件中调用带有C#属性的公共静态方法,以获得一些json和其他简单的东西(在不同的函数中)。但相反,我得到了一整页:
我没有使用asp.net AJAX,尽管我正在开发.NET 3.5框架并使用VS 2008。(客户有一些限制)
请告诉我是否可以使用asp.net ajax的页面方法,或者如果不是,其他简单的解决方案是什么?
发布于 2009-06-08 06:15:53
经过深思熟虑,我发现了这个问题。我在用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插件并使用dataType上的以下测试来改变ajax中数据的发送方式:
if (settings.dataType == "json") {
if ($.toJSON) {
submitdata = $.toJSON(submitdata);
}
}就像微风一样!
发布于 2009-05-22 10:56:04
我不确定,但我认为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-22 19:27:21
拉斯·卡姆在对另一个问题的答复上发布了这个链接(如果这有帮助的话,可以投票给他的答案):
使用jQuery直接调用ASP.NET AJAX页面方法
https://stackoverflow.com/questions/897176
复制相似问题