我有以下 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 请求返回“未定义”。
谁能告诉我为什么会发生以及问题出在哪里?
Thanks.
您确实应该确保正确编码此 JSON。JSON.stringify
最可靠的方法是:
data: JSON.stringify({ accessCode: code, newURL: url })
这确保了即使code
and url
变量包含一些危险字符,这些字符会破坏生成的 JSON 中的字符串连接,最后所有内容都会被正确编码。 JSON.stringify 方法自然内置于现代浏览器中,但如果您需要支持旧版,您可以包括json2.js.
另外,因为您的代码不再阻塞,所以您应该确保如果您调用此代码sendUpdate
通过单击某个按钮或提交表单,您可以通过返回 false 来取消默认操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)