0

私はこのようなモデルを持っています

function DetailsViewModel() {
    var self = this;
    self.Day = ko.observable();
    self.DateNumber = ko.observable();
    self.Details = ko.observableArray([]);

    self.LoadData = function () {

        var data = { date: '2013-09-18' }
        var url = "php/abc.php"
        var callback = self.Result();

        ajax(url , data , self.Result , type );

        /*
        $.ajax({
            url: "/api/Timesheet/DayDetailResult",
            async: false,
            type: "GET",
            data: ko.toJSON(data),
            dataType: 'JSON',
            success: function (details) {
                self.DateNumber(details.DateNumber);
                self.Day(details.Day);
                self.Details(details.Details);
            }
        });
        */
    };

    self.AddDayDetails = function () {
        window.location.href = '/Home/AddTimeSheetEntry';
    }

    self.Result = function (details) {
        self.DateNumber(details.DateNumber);
        self.Day(details.Day);
        self.Details(details.Details);            
    }

    self.LoadData();
}

そして、ここにajax関数があります

function ajax(url , data , callback , type ) {

    var type = (type === undefined) ? "GET" : type;
    $.ajax({
        url: url,
        async: false,
        type: type,
        data: ko.toJSON(data),
        dataType: 'JSON',
        success: callback(data)
    });
}   

問題は、self.LoadData関数内でajaxリクエストのコメントを外すと、すべて正常に機能することです。しかし、アプリケーション全体でグローバル ajax 関数を使用したいと考えています。ajaxの成功からデータを取得する必要があり、ajaxの成功から呼び出す必要があるself.Resultを定義しています。どうやってやるの。コードを実行すると、このエラーが発生します

`details is undefined`

ここで何かを実行して機能させる必要があると思いますが、方法がわかりません。

ajax(url , data , self.Result , type );

助けてください。私は Javascript の専門家ではありません。

4

2 に答える 2

2

2 つの問題があります。

  • 例外をスローする引数なしで関数var callback = self.Result();を実行する余分な行があるため、この誤った行を削除してください。Resultdetails is undefined

  • 主な問題はsuccess: callback(data)、提供された値でコールバックをすぐに実行し、dataその戻り値をsuccessプロパティに割り当てるため、行にありundefinedます。

    ここで必要なのは、callback参照を直接渡すことです。

    $.ajax({
        url: url,
        async: false,
        type: type,
        data: ko.toJSON(data),
        dataType: 'JSON',
        success: callback
    });
    
于 2013-09-19T11:31:41.120 に答える