1

以下のスニペットの ajax 呼び出しから isValid 値を戻すために、この値を取得できないようです。

    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 が再び false であると見なされます
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 に答える