1

我似乎无法让这个值将 isValid 值从下面的代码片段中的 ajax 调用中传回:

    function isShortUrlAvailable(sender, args) {
        var isValid = false;
        $.ajax({
            type: "POST",
            url: "/App_Services/ShortUrlService.asmx/IsUrlAvailable",
            data: "{url: '" + args.Value + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                isValid = response.d;
            },
            error: function (msg) {
                isValid = false;
            }
        });

        args.IsValid = isValid;
    }

我敢肯定,这只是与我忽略的闭包有关的简单事情。有人可以帮忙吗?

它用于 asp.net 自定义验证器。

这就是正在发生的事情:

  1. isValid 在第一行设置为 false
  2. .ajax() 请求正确触发,如果其有效返回 true
  3. isValid 正确设置为 true (response.d)
  4. 当它回到最后一行时,它认为 isValid 再次为假
4

1 回答 1

1

AJAX 方法是异步的,这意味着您的值设置为false,开始 AJAX 调用,但在它发生的同时args.IsValid调用该行。只需删除变量并args.IsValid在每个场景中设置值:

function isShortUrlAvailable(sender, args) {
    $.ajax({
        type: "POST",
        url: "/App_Services/ShortUrlService.asmx/IsUrlAvailable",
        data: "{url: '" + args.Value + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            args.IsValid = response.d;
        },
        error: function (msg) {
            args.IsValid = false;
        }
    });
}
于 2013-05-24T11:00:20.267 回答