【问题标题】:Is there a way to modify requested data on ajax call?有没有办法在 ajax 调用上修改请求的数据?
【发布时间】:2014-02-20 08:04:43
【问题描述】:

我有一个淘汰脚本,它通过 ajax 从服务器加载数据并将此信息输出到模型中。如果为了简化一切,我的模型如下所示:

function ArticleViewModel() {
    var self = this;
    this.articleInfo = ko.observable();

    this.getArticle = function(id) { 
        $.get("/router.php", { articleId: id }, self.articleInfo, 'json');
    };
};

一切都很好(我的视图填充了来自服务器的信息)。但我需要修改这些信息(例如将数据从时间戳更改为人类可读格式)。

据我了解,实现它的一种方法是通过knockout computed observables,但我没有看到这样做的原因,因为我在这里永远不需要时间戳,我可以在更新后更改一次数据并使用它(如果我错了,我很乐意听到为什么以及如何使用计算出的 observables 来实现我想要的)。

所以我尝试通过以下方式更改我的 ajax 请求数据(一切都一样,但 ajax 调用有回调):

$.get("/router.php", { type : 'mail' }, function(i){
    var d = new Date(i.date);
    self.articleInfo = {
        date: d.toString(),
        title: i.title
    };
}, 'json');

我在页面上没有错误,但没有显示任何信息。当我转到其他页面时,我看到一条警告:TypeError {stack: (...), message: "500 Error get /#Home Property 'articleInfo' of object #<ArticleViewModel> is not a function"}

我做错了什么?

【问题讨论】:

    标签: knockout.js computed-observable


    【解决方案1】:

    我猜self.chosenMailData 是一个 observable,如果是,你应该将它设置为一个函数,即self.chosenMailData(newValue); 不 作为一个属性self.chosenMailData = newValue; //this will not work。如果它是不可观察的,那么当然,任何绑定都不会被更新,因为他们不知道值已经改变。

    原因是,如果你替换 observable 属性(不是 observable 值),所有订阅仍将是旧的 observable,它仍然具有旧值。

    关于错误,它声明 500 这听起来像是服务器错误,而不是客户端错误。

    【讨论】:

    • 抱歉,是articleInfo,不是选择的MailData。你节省了我绝望的编码的几个小时。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 2014-05-20
    • 2015-04-09
    • 2019-03-01
    • 1970-01-01
    • 2020-05-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多