c# - 对 ASP.NET WebMethod 的 jQuery AJAX 调用

标签 c# jquery ajax webmethod

我有以下 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 是最可靠的方法:

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

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

此外,因为您的代码不再阻塞,您应该确保如果您从某个按钮点击或表单提交中调用此 sendUpdate,您可以通过返回 false 来取消默认操作。

关于c# - 对 ASP.NET WebMethod 的 jQuery AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770679/

相关文章:

c# - 对于动态加载的 Razor 类库,ASP.NET Core 运行时编译失败并显示 "Cannot find compilation library location for package"

c# - 如何使用 Linq 检查 JSON 中的标签

c# - 计算器故障: Only getting second value I enter

jQuery UI DatePicker 更改突出显示的 "today"日期

jQuery悬停 - 按钮保持悬停效果

javascript - Ajax 操作真的应该有单独的 URL 吗?

javascript - 使用 AJAX 与 socket.io 套接字消息

c# - SQL Server 事务提交超时

javascript - 在文本框中设置第一个单词的背景颜色?

c# - 无法处理消息,因为内容类型 'application/json; charset=utf-8' 不是预期的类型 'text/xml; charset=utf-8'