【问题标题】:Trouble reading from json file in Javascript无法从 Javascript 中读取 json 文件
【发布时间】:2014-09-09 23:30:00
【问题描述】:

我对 ajax 和 json 几乎一无所知。现在我正在尝试将 DealerData.json 中的数据读取到我的 MVVM 视图模型中,并且“数据”一直以未定义的形式返回。

$(function () {
    var obj;
    $.ajax({
        dataType: "json",
        url: "/Scripts/dealerData.json",
        success: function (data) {
            obj = JSON.parse(data);            
        }
    });

    ko.applyBindings(DealerNumberLotNumberViewModel(obj));
});

【问题讨论】:

  • 你检查过哪些数据吗?就像尝试在控制台上打印数据一样
  • 无论您需要对数据做什么,都需要在该成功处理程序中进行。
  • 你的JS代码可以访问json文件吗?这就是 ajax 中的错误处理程序可能有用的地方。添加错误处理程序,然后尝试。参考:api.jquery.com/jquery.ajax
  • 添加了错误处理程序,由于某种原因我一直收到 404,尝试更改文件路径无济于事:/

标签: javascript jquery ajax json mvvm


【解决方案1】:

试试这样:

  $(function () {
        var obj;
        $.ajax({
            dataType: "json",
            url: "/Scripts/dealerData.json",
        })
            .done(function (data) {
                obj = JSON.parse(data);
                ko.applyBindings(DealerNumberLotNumberViewModel(obj));
            });
    })

【讨论】:

    【解决方案2】:

    ko.applyBindings(DealerNumberLotNumberViewModel(obj)); - 这应该像这样进入回调方法 -

    $(function () {
    var obj;
    $.ajax({
        dataType: "json",
        url: "/Scripts/dealerData.json",
        success: function (data) {
            obj = JSON.parse(data);
            ko.applyBindings(DealerNumberLotNumberViewModel(obj)); 
    
        }
    });
    

    因为 obj 是未定义的,直到回调方法“success”实际为它分配了一些东西。并且 ko.applyBinding 方法应该在 obj 定义后执行。因此,它应该放在回调方法中。

    此外,始终有一个失败回调方法是个好主意,这样任何失败都不会被遗漏。

    $(function () {
    var obj;
    $.ajax({
        dataType: "json",
        url: "/Scripts/dealerData.json",
        success: function (data) {
            obj = JSON.parse(data);
            ko.applyBindings(DealerNumberLotNumberViewModel(obj)); 
    
        },
        error: function(args) {
         console.log('error occured: '+ args);
        }
    });
    

    希望,这会有所帮助

    【讨论】:

    • 我试过了。如果我将数据分配给全局 var obj,应该不会有什么不同。
    • No 不,这会有所不同,因为回调方法是异步的,它会在 ko.applyBindings(DealerNumberLotNumberViewModel(obj)); 之后执行.在这种情况下,您的视图模型未定义 obj
    • 哦,可能有一些故障。你不添加失败回调,看看是否被调用。我会在我的回答中更新它
    • 我一直收到 404。我的路径可能是错误的,但我已经尝试过 "Scripts/dealerData.json" 和 "/Scripts/dealerData.json" 太棒了,我不确定跨度>
    • 您的dealerData.json 相对于该代码所在的文件位于何处?如果这两个文件在同一个文件夹中。给这个路径=“dealerData.json”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多