【问题标题】:Splicing and then saving json array via ajax通过ajax拼接然后保存json数组
【发布时间】:2018-01-12 16:34:24
【问题描述】:

我无法让我的 json 数组接受更改。我正在尝试从数组中删除一个对象,它似乎可以工作,但是当我查看服务器上的 json 数组时,它保持不变。我在这里错过了什么?

这是我正在使用的功能:

$(function() {
    $("#rectangle-delete").click(function() {

      var selection = $('#templateSelection > option:selected').text();

      var json = (function () {
        var json = null;
        $.ajax({
            'async': false,
            'global': false,
            'type': 'POST',
            'contentType':"application/json",
            'url': 'server/php/data/' + selection,
            'dataType': "json",
            'success': function (data) {
                json = data;
            }
        });
        return json;
      })();

      var ID_clicked = $(".rectangle.selected.targeted").attr('id');

      console.log('initial array is ' + json);

      json.some(function(e) {
        if (e.ID === ID_clicked) {

            var values = json.map(function(e) { return e.ID; });
            var index = json.map(function(e) { return e.ID; }).indexOf(ID_clicked);
            var data = JSON.stringify(json[index]);

            json.splice(index, 1);

            return true; // stop the array loop
        }
      });

      console.log('new array is ' + json);
    });
});

控制台显示:

initial array is [object Object],[object Object],[object Object]

然后

new array is [object Object],[object Object]

但我仍然没有更改服务器上实际的 json 文件。

【问题讨论】:

  • 任何本地更改都必须发送到服务器,服务器端脚本必须进行任何文件修改。永远不要使用async:false。这是一种可怕的做法,已被弃用。您应该会在浏览器控制台中看到有关该弃用的警告

标签: javascript arrays json ajax


【解决方案1】:

当您从服务器拉下 json 时,您不会获得对服务器上对象的引用,但您会获得数据的副本。

所以您只是在修改客户端上的数据。

要更新服务器上的对象,您应该将更改通知服务器(或反转让服务器进行计算并直接在客户端检索结果的逻辑)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多