jQuery AJAX调用一个ASP.净WebMethod
本文关键字:一个 ASP WebMethod AJAX 调用 jQuery | 更新日期: 2023-09-27 18:11:29
我有以下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。净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请求返回"undefined"。
谁能告诉我为什么会这样,问题在哪里?谢谢。
您应该确保正确编码这个JSON。JSON.stringify
是最可靠的方法:
data: JSON.stringify({ accessCode: code, newURL: url })
这确保了即使code
和url
变量包含一些危险的字符,这些字符将在最终的JSON中破坏字符串连接,所有内容都将被正确编码。JSON。Stringify方法是内置在现代浏览器中的,但如果你需要支持旧版本,你可以包括json2.js。
sendUpdate
从一些按钮点击或表单提交你取消默认的动作返回false。
我的方法是正确的:
[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
});
}
然后,调用use (call in 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>');
});
"undefined"可能是服务器错误的结果。如果您使用Firebug、Firefox(或任何好的客户机调试工具),您可以找到服务器返回的错误。粘贴错误,如果有的话。
然而,我也注意到"accessCode"的"data"没有被正确地括在引号‘年代;
正确的数据选项应该是:
data: "{ accessCode: '" + code + "', newURL: '" + url + "' }",
PS:因为"options"在Jquery中有不同的含义,我建议将变量名改为"setting"。将'var options '改为'var settings'。:)