Javascript 来自ajax post的淘汰映射数据与静态数据

Javascript 来自ajax post的淘汰映射数据与静态数据,javascript,jquery,ajax,knockout.js,knockout-mapping-plugin,Javascript,Jquery,Ajax,Knockout.js,Knockout Mapping Plugin,我在Ko映射方面遇到了一个奇怪的问题。 我使用这段代码: var PList = [{ "Region": { "RegionName": "SomeRegion" }, "CDetails": {}, "Category": { "Name": "SomeCategory" }, "PSource": 1, "PDate": "0001-01-01T00:00:00"}]; var PViewModel = ko.mapping.fromJS(search('someSearch', 'Tr

我在Ko映射方面遇到了一个奇怪的问题。 我使用这段代码:

var PList = [{ "Region": { "RegionName": "SomeRegion" }, "CDetails": {}, "Category": { "Name": "SomeCategory" }, "PSource": 1, "PDate": "0001-01-01T00:00:00"}];

var PViewModel = ko.mapping.fromJS(search('someSearch', 'True'));
var PViewModel2 = ko.mapping.fromJS(PostList);

function search(queryString, isFirst) {
    $.ajax({
        type: 'POST',
        url: 'url',
        data: { 'searchQuery': queryString },
        dataType: 'json',
        success: function (dt) {
            if (isFirst != 'True') {
                ko.mapping.fromJS(dt, PostsViewModel);
            }
            return dt;
        }
    });
};
奇怪的是,我看到了两种结果:

  • 当我转到PViewModel(由ajax填充的模型)时,我认为它是
    未定义的
  • 当我转到PViewModel2(带有静态数据的模型)时,我可以看到预期的对象
  • *PViewModel2的静态数据只是ajaxpost返回的数据的副本

    我的问题是:

  • 有人知道为什么会这样吗?如何修复它
  • 此外,
    if(isFirst!=“True”)
    子句是初始化ko视图模型的正确方法吗

  • 您正在处理一个异步操作(Ajax请求)。这些操作没有返回值。因此,这是行不通的:

    ko.mapping.fromJS(search('someSearch', 'True'));
    
    这就是
    success
    回调的目的。传入数据只能在那里处理

    function search(queryString, targetObservable) {
        $.ajax({
            type: 'POST',
            url: 'url',
            data: { 'searchQuery': queryString },
            dataType: 'json',
            success: function (dt) {
                ko.mapping.fromJS(dt, targetObservable);
            }
        });
    };
    
    search('someSearch', PostsViewModel);
    

    您正在处理一个异步操作(Ajax请求)。这些操作没有返回值。因此,这是行不通的:

    ko.mapping.fromJS(search('someSearch', 'True'));
    
    这就是
    success
    回调的目的。传入数据只能在那里处理

    function search(queryString, targetObservable) {
        $.ajax({
            type: 'POST',
            url: 'url',
            data: { 'searchQuery': queryString },
            dataType: 'json',
            success: function (dt) {
                ko.mapping.fromJS(dt, targetObservable);
            }
        });
    };
    
    search('someSearch', PostsViewModel);
    

    您的问题不清楚包括所有其他脚本以便我们可以查看模型结构和绑定您的问题不清楚包括所有其他脚本以便我们可以查看模型结构和绑定