对 ASP.NET WebMethod 的 jQuery AJAX 调用
Posted
技术标签:
【中文标题】对 ASP.NET WebMethod 的 jQuery AJAX 调用【英文标题】:jQuery AJAX call to an ASP.NET WebMethod 【发布时间】:2011-12-07 21:54:31 【问题描述】:我有以下 jQuery AJAX 请求:
function sendUpdate(urlToSend)
var code = AccessCode;
var url = urlToSend;
var options = error: function(msg) alert(msg.d); ,
type: "POST", url: "webmethods.aspx/UpdatePage",
data: " accessCode: " + code + ", newURL: '" + url + "' ",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(response) var results = response.d; ;
$.ajax(options);
以及对应的ASP.NET WebMethod:
[WebMethod]
public static bool UpdatePage(string accessCode, string newURL)
bool result = true;
try
HttpContext.Current.Cache[accessCode + "l"] = newURL;
catch
result = false;
return result;
这一切过去都可以与“async:false”一起正常工作,但是我必须摆脱它,因为它会冻结浏览器直到收到响应。现在上面的 AJAX 请求返回“未定义”。
谁能告诉我为什么会这样以及问题出在哪里?
谢谢。
【问题讨论】:
什么是未定义的,“response”或“response.d”?你应该看到完整的响应对象是什么,看看它是否给你来自服务器的任何错误消息。 【参考方案1】:您确实应该确保正确编码此 JSON。 JSON.stringify
是最靠谱的方法:
data: JSON.stringify( accessCode: code, newURL: url )
这可以确保即使code
和url
变量包含一些危险字符,这些字符最终会破坏生成的 JSON 中的字符串连接,但所有内容都将被正确编码。 JSON.stringify 方法自然地内置在现代浏览器中,但如果您需要支持旧版,您可以包含 json2.js。
另外,因为您的代码不再阻塞,您应该确保如果您通过单击某个按钮或表单提交调用此 sendUpdate
,您会通过返回 false 来取消默认操作。
【讨论】:
【参考方案2】:我的方法正确:
[System.Web.Services.WebMethod()]
public static string getHello(string str)
//do some things with str
return str;
在 .js 文件中,我定义了这个函数来调用 .cs 文件中的 webmethod:
function CallServerFunction(StrPriUrl, ObjPriData, CallBackFunction)
$.ajax(
type: "post",
url: StrPriUrl,
contentType: "application/json; charset=utf-8",
data: ObjPriData,
dataType: "json",
success: function (result)
if (CallBackFunction != null && typeof CallBackFunction != 'undefined')
CallBackFunction(result);
,
error: function (result)
alert('error occured');
alert(result.responseText);
window.location.href = "FrmError.aspx?Exception=" + result.responseText;
,
async: true
);
然后,调用使用(在file.js中调用):
var text = $("#textbox_send").val();
var myresult;
CallServerFunction("Default.aspx/getHello", JSON.stringify( str: text ), function (myresult)
if (text != "")
$('#' + id).append('<p>' + $("#account_user").text() + ': ' + myresult.d + '</p>');
);
【讨论】:
【参考方案3】:“未定义”可能是服务器错误的结果。如果您使用Firebug,Firefox(或任何好的客户端调试工具),您可以找到服务器返回的错误。粘贴错误(如果有)。
尽管如此,我还注意到“accessCode”的“数据”没有正确包含在引号''中
更正后的数据选项是:
data: " accessCode: '" + code + "', newURL: '" + url + "' ",
PS: 由于 'options' 在 Jquery 中具有不同的含义,我建议将变量名称更改为 'setting' 。将“var options”更改为“var settings”。 :)
【讨论】:
以上是关于对 ASP.NET WebMethod 的 jQuery AJAX 调用的主要内容,如果未能解决你的问题,请参考以下文章
从 javascript 调用 webmethod 时出现 ASP.NET 500 内部服务器错误
如何将json字符串传递给webmethod c# ASP.NET
从 ASP.NET Webservice 中删除了 WebMethod,方法仍然显示
使用 jQuery 将 JSON 对象成功发送到 ASP.NET WebMethod