一尘不染

jQuery AJAX调用ASP.NET WebMethod

c#

我有以下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”。

谁能告诉我为什么会这样,问题出在哪里?

谢谢。


阅读 285

收藏
2020-05-19

共1个答案

一尘不染

您确实应该确保正确编码此JSON。JSON.stringify是最可靠的方法:

data: JSON.stringify({ accessCode: code, newURL: url })

这样可以确保即使codeurl变量包含一些危险的字符,这些字符最终都会破坏所得JSON中的字符串连接,所有内容都将得到正确编码。JSON.stringify方法很自然地内置于现代浏览器中,但是如果您需要支持旧版,则可以包含json2.js

另外,由于您的代码不再受阻,因此应确保如果您sendUpdate通过单击按钮或表单提交来调用此代码,则可以通过返回false来取消默认操作。

2020-05-19