1

私はこれに関する他のいくつかの質問を読みましたが、これを機能させる方法をまだ理解できませんでした。

私はajax呼び出しを行うこの関数を持っています:

    function validateDataPoint(newDataPoint) {
        var $form = $(this).parents('form');
        var $formAction = $form.attr('action');
        var $validationResult;

        return $.ajax({
            type: "POST",
            url: "/DataPoints/ValidateNewDataPointBeforeSaving",
            data: newDataPoint
        });

        return $validationResult;
    }

そして、これは私が別の関数内からそれを呼び出す方法です:

        var validationRequest = validateDataPoint(newDataPoint);
        validationResult = validationRequest.success(function (data) {
            return data.Urn;
        });

次に、同じ関数内で、data.Urnの文字列値が、サーバー側で完了した処理に関連して「Success」または「Failed」のいずれかになるため、validationResultの値をテストします。

したがって、以下のコードがあります。

        //post the Json object to the server to validate and get the result
        var validationRequest = validateDataPoint(newDataPoint);
        validationResult = validationRequest.success(function (data) {
            return data.Urn;
        });

        //based on the result give the thumbs-up or thumbs-down
        if (validationResult == "Success") {
            resultFlag = "<span class='badge badge-success'><i class='icon-thumbs-up icon-white'></i></span>";
        }
        else if (validationResult == "Failed") {
            resultFlag = "<span class='badge badge-important'><i class='icon-thumbs-down icon-white'></i></span>";
        }
        else {
            resultFlag = "<span class='badge badge-warning'></span>";
        }

だから問題は...

validateResult.responseTextの値にアクセスしようとすると、未定義のエラーが発生します。基本的に、data.Urnの値をvalidationResultに割り当てたいのですが、これを機能させることができません。警告した場合(validationResult); [object Object]を取得し、alert(validationResult);を取得します。未定義になります。

ここで何が欠けていますか?

4

1 に答える 1

1

jQuery の ajax 関数は非同期で動作します。validationResultajaxが実際に終了する前に、チェックが行われています。

それらをコールバックに入れないのはなぜですか?

validationResult = validationRequest.success(function (data) {
    processResponse(data.Urn);
});

function processResponse(validationResult)
{
    //based on the result give the thumbs-up or thumbs-down
    if (validationResult == "Success") {
        resultFlag = "<span class='badge badge-success'><i class='icon-thumbs-up icon-white'></i></span>";
    }
    else if (validationResult == "Failed") {
        resultFlag = "<span class='badge badge-important'><i class='icon-thumbs-down icon-white'></i></span>";
    }
    else {
        resultFlag = "<span class='badge badge-warning'></span>";
    }
}
于 2012-11-28T21:34:52.737 に答える