我有以下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请求返回“ undefined”。
谁能告诉我为什么会这样,问题出在哪里?
谢谢。
您确实应该确保正确编码此JSON。JSON.stringify是最可靠的方法:
JSON.stringify
data: JSON.stringify({ accessCode: code, newURL: url })
这样可以确保即使code和url变量包含一些危险的字符,这些字符最终都会破坏所得JSON中的字符串连接,所有内容都将得到正确编码。JSON.stringify方法很自然地内置于现代浏览器中,但是如果您需要支持旧版,则可以包含json2.js。
code
url
另外,由于您的代码不再受阻,因此应确保如果您sendUpdate通过单击按钮或表单提交来调用此代码,则可以通过返回false来取消默认操作。
sendUpdate