2

これが私のコードです

var jsonpath;

function loginFromDef() {

    var a = grantAccess($('#login :input').serialize());
    if (a.Msg) {
        $('#msg').html(a.Msg).attr('class', 'error');
    }
    else if (a.done) {
        var returnUrl = getQueryString('ReturnURL');
        if (returnUrl)
            window.location = returnUrl;
        else
            window.location = 'Home.aspx';
    }


    return false;
}

function grantAccess(dataToPost) {

    $.ajax({
        type: "POST",
        url: jsonpath + 'Json.ashx?method=GrantAccess',
        async: false,
        data: dataToPost,
        success: function (data) {
            return data;
        }
    });
}

function getQueryString(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var jsonPath送信ボタンのイベントで関数loginFromDef()を呼び出している Default.aspx ページで定義されています。onclick

エラーが発生していますハンドラーTypeError: a is undefined について心配しないでください。.ashx正常に動作しています。私はそれをテストします。

var a関数loginFromDefが初期化されていないと思います。may be jQuery is making asynchronous call. Even I have set async:falseオプションだから。

私がどうかしましたか、まずいことでもありましたか..??これに対する解決策を提案してください。

4

3 に答える 3

1

問題は、successAjax呼び出しの機能にあります。

function grantAccess(dataToPost) {
    $.ajax({
        type: "POST",
        url: jsonpath + 'Json.ashx?method=GrantAccess',
        async: false,
        data: dataToPost,
        success: function (data) {
            return data;
        }
    });
}

成功関数はGrantAccess関数とは異なります。GrantAccessは値を返さないため、次の行になります。

var a = grantAccess($('#login :input').serialize());

常に結果にaなりますnull

あなたがすべきことは次のとおりです。

function loginFromDef() {

    grantAccess($('#login :input').serialize());
}

function grantAccess(dataToPost) {

    $.ajax({
        type: "POST",
        url: jsonpath + 'Json.ashx?method=GrantAccess',
        async: false,
        data: dataToPost,
        success: TheFollowUpFunction(data)
    });
}

    //NEWLY ADDED:

    function TheFollowUpFunction(a) {

        if (a.Msg) {
            $('#msg').html(a.Msg).attr('class', 'error');
     }
    else if (a.done) {
         var returnUrl = getQueryString('ReturnURL');
          if (returnUrl)
            window.location = returnUrl;
          else
            window.location = 'Home.aspx';
    }

    }
于 2012-08-21T08:53:10.320 に答える